makefile指定头文件和库出错的那点破事

时间:2021-10-13 12:43:05

       某模块提供了test.h头文件和libtest.a库, 供外部代码调用:

      1. 如果在代码中包含了某头文件test.h,  但在makefle中没有指定头文件路径/或者头文件根本不存在, 会出现编译错误, 会提示缺少test.h.

      2. 如果包含了test.h头文件,且指定了头文件路径,  且指定libtest.a库, 但实际此库并不存在(比如没有提前编译出来), 会出现编译错误, 提示缺少 cannot find -ltest

      3.如果包含了头文件,且指定了头文件路径,  但makefile没有指定libtest.a库, 编译的时候不会出问题, 但运行的时候会出问题: dlopen ... failed,  undefined symbol ...


      针对1: 用-I指定即可

      针对2: 找到libtest.a库本该在的路径, 把libtes.a库放进去(比如编译生成)

      针对3: 可以用ldd -r 或者nm -u命令在编译后查看xxx.so库缺什么符号(不用等到运行期出错才知道), 然后按照2来搞。 至于ldd命令和nm命令, 之前已经介绍过啦。