提问人:LuckyD1ce 提问时间:10/25/2020 最后编辑:halferLuckyD1ce 更新时间:10/25/2020 访问量:1073
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'
在其他答案中,链接器和 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,或者如果有人有其他可能性来使编译工作,我会很高兴。这是 git-repo 的链接:https://github.com/Proxmark/proxmark3。我对 Makefile 的了解非常少,所以我在预制文件中没有看到任何问题。
答:
0赞
Barak Friedman
10/25/2020
#1
在没有深入研究 makefile 的情况下,您确实正确使用了 include 指令, 但可能可执行文件的 make 命令(链接)不包括 您现在使用(和引用)的库。 在生成文件中查找调用链接器的位置 (gcc 或者 g++ 或 ld),并查看库(可能是 mbedtls)是否出现在 正在链接的文件列表。
评论
0赞
LuckyD1ce
10/25/2020
谢谢,我已经查看了 makefile 的输出,问题是,来自 mbedtls 的文件未包含在链接器调用中。我已经编辑了makefile,它现在正在工作。
评论
mbedtls