makefile碰到问题总结

309 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

警告:将一个整数转换为大小不同的指针

[-Wint-to-pointer-cast] make 报错 make报错解决方案: 分析原因是因为,没有引用PEM_read_RSA_PUBKEY的头文件,直接执行命令

man PEM_read_RSA_PUBKEY

查找所需头文件 #include <openssl/pen.h> 添加到调用本函数的.c文件中。 make警告解决。

/usr/bin/ld:找不到 -lxxx

在这里插入图片描述 make报错解决方案: 不是系统库,但是我已经在-L中指明静态库所在路径,之后我又把库的路径,加到LD_LIBRAR_PATH环境变量当中(这步不知道有没有用)。编译依然报错。

考虑静态库顺序问题,gcc依赖顺序从后到前,把底层库顺序调到最后。make成功。

undefined reference to symbol *** DSO missing ***

/usr/bin/ld:/home/…/lib111.so:undefined reference to symbol ‘***’

/home/…/lib222.so:error adding symbols:DSO missing from commadn line

collect2:错误:ld 返回1 在这里插入图片描述 make报错解决方案: makefile中gcc后添加函数所在的库,假设函数已经被编译成了lib222.so,makefile中在gcc后边添加-l222。重新编译之后成功。

对***未定义的引用

make报错解决方案: makefile中gcc后添加函数所在的库,假设函数已经被编译成了lib222.so,makefile中在gcc后边添加-l222。重新编译之后成功。

执行动态库函数报错

这个可能是我们系统打出的报错,但是确实是makefile引起的问题,报错之后,我使用nm查看动态库,发现make并没有将函数编译成动态库。排查原因,发现makefile中gcc少参数,没有将函数的头文件加入gcc,加入-I头文件目录,编译再运行成功。记录一下。