C - 未定义的引用

C - undefined reference to

我目前正在用 C 开发一个项目。我搜索了多个类似的问题,但答案对我来说太不具体了,因为我过去并没有真正使用过 C。

我的问题如下:

该项目由多个不同的文件组成。我正在编辑文件 "pm3/armsrc/epa.c"。现在我需要使用另一个文件中的函数。该函数位于"pm3/common/mbedtls/sha1.c.

我试图将此文件包含在我的 epa.c 中,如下所示:

#include "../common/mbedtls/sha1.h"

它似乎可以工作,我可以访问该功能。但是在启动 Makefile 以编译项目后(到目前为止工作正常),我在 epa.c:

中收到一条错误消息
undefined reference to `mbedtls_sha1_ret'

在其他答案中,linker 和 gcc 调用似乎有问题,但是 Makefile 调用多个其他 Makefile 以构建所有内容都是预制的。正如您在“make all”输出中看到的那样,已成功构建具有所需功能的文件:

Compiling mbedtls
cd ../common/mbedtls && make all
make[2]: Entering directory '/pm3/common/mbedtls'
ar rcs libmbedtls.a aes.o asn1parse.o asn1write.o base64.o bignum.o ctr_drbg.o entropy_poll.o entropy.o error.o timing.o ecp.o ecp_curves.o certs.o camellia.o blowfish.o cipher_wrap.o cipher.o cmac.o des.o ecdsa.o md.o md_wrap.o md5.o oid.o pem.o arc4.o pk.o pk_wrap.o pkwrite.o pkcs5.o pkcs12.o pkparse.o platform.o platform_util.o rsa.o rsa_internal.o sha1.o sha256.o sha512.o threading.o x509.o x509_crl.o x509_crt.o
ranlib libmbedtls.a
make[2]: Leaving directory '/pm3/common/mbedtls'

如果有人可以看一下 Makefile,或者如果有人有另一种可能性以使编译正常工作,我将非常高兴。这是 link 到 git-repo:https://github.com/Proxmark/proxmark3。我对Makefiles的了解很低,所以我看不出预制的有什么问题。

无需深入研究 makefile,您确实正确使用了 include 指令, 但可能可执行文件的 make 命令 (link) 不包括 您现在使用(和引用)的库。 在 makefile 中寻找调用 linker 的地方 (gcc 或可能是 g++ 或 ld),然后查看库(可能是 mbedtls)是否出现在 正在 linked 的文件列表。