当我尝试编译我的应用时出现以下错误:
*** No rule to make target `/mypath/lib/libm.a', needed by `/myPath/bin/appName'
为什么链接器根据绝对路径查找libm.a?
答案 0 :(得分:5)
我开始考虑将编程转换为心理事业......
为什么链接器根据绝对路径查找libm.a?
因为你告诉他这样做。很可能你输入了
# There were some rules that build your own .a libs
myLib.a: ...
...
# Handy rule to direct your libs into lib/ folder!
vpath %.a /mypath/lib
appName: appName.o libm.a
g++ $^ -o $@
糟糕!你需要“system”libm.a
(这是一个数学库,是glibc的一部分),但make
认为你需要自己的静态库。然后它会添加正确的前缀,并且找不到重新制作libm.a
的任何规则。
解决方案可能会使libm.a
超出先决条件。这是配置脚本或特殊make sanity
目标的目的,以检查系统库的存在。
EXT_LIBS=libm.a
appName: appName.o
g++ $^ $(EXT_LIBS) -o $@