c - C- undefined reference

标签 c makefile compiler-errors undefined-reference

我目前正在使用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的Makefile都是预制的。如您在“全部制作”输出中所见,成功构建了具有所需功能的文件:
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的了解很少,因此我看不到预制文件有任何问题。

最佳答案

在不深入makefile的情况下,您确实正确使用了include指令,
但是可执行文件的make命令(链接)可能不包含
您现在使用(并已引用)的库。
在makefile中寻找链接器调用的位置
(gcc或g++或ld),然后查看该库(可能是mbedtls)是否出现在
链接文件列表。

关于c - C- undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64516154/

相关文章:

C:知道变量何时被读取或写入

c++ - 在 avr g++ 中禁用函数声明错误

c - "make clean"结果 "No rule to make target ` 干净 '"

java - 添加到通用列表<?> 产生编译错误

c - 仅使用单精度 float 逼近 [0,pi] 上的余弦

c - 在不创建临时文件的情况下打开 gzip 文件以在 C 中读取

c - 使用简单的数学运算得出奇怪的结果

c++ - g++/clang++ 中带有 makefile 的参数顺序

ios - 如何在 iOS 模拟器上删除 hello world 的东西

c++ - 两个编译器之间的答案差异