C-对

问题描述

我目前正在使用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)是否出现在 链接的文件列表。