尝试编译我的应用程序时出现以下错误:

*** No rule to make target `/mypath/lib/libm.a', needed by `/myPath/bin/appName'


为什么链接器根据绝对路径寻找libm.a?

最佳答案

我开始考虑将编程转向心理职业。


为什么链接器根据绝对路径寻找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 $@


哎呀!您需要“系统” libm.a(这是数学库,是glibc的一部分),但是make认为您需要自己的静态库。然后,它添加适当的前缀,并且找不到重新制作libm.a的任何规则。

解决方案可能是将libm.a移出先决条件。这是配置脚本或特殊的make sanity目标以检查系统库是否存在的目的。

EXT_LIBS=libm.a

appName: appName.o
   g++ $^ $(EXT_LIBS) -o $@

关于g++ - 没有目标的规则... libm.a,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1703624/

10-13 09:19