我遇到类似的问题unanswered question。我将我的代码提交给构建系统以使用其g ++二进制文件。但是,构建将移动到具有随机生成的名称的临时路径(例如/temp-build/1ab3fDg/...
),而g ++本身不会重新编译,并且.la不会刷新(不可行)。因此,当libtool查找libstdc ++时,它会查找/temp-build/1ab3fDg/libstdc++.la
文件以获取它的路径并看到:
libdir=/temp-build/J2213bgB/.../
这是gcc最初编译的随机路径的目录。实际的.so与.la文件(/temp-build/1ab3fDg
)位于同一目录中,但libtool遵循错误的libdir路径。
我想知道是否有办法告诉libtool忽略.la文件并在我指定的目录中查找libstdc ++。或者,这个问题还有其他可能的解决办法吗?我正在使用autoconf / automake来生成Makefile。
答案 0 :(得分:3)
如果您可以控制它,只需删除libstdc++.la
即可。遗憾的是,这是一个非常麻烦的libtool
设计,用于硬编码用于安装软件的路径,并且可能会导致此类问题。
但是.la
文件的价值非常有限,并且通常与静态存档的依赖关系跟踪有关,没有其他方式来表达它们。但是对于libstdc++
,无论如何都没有依赖关系,因此即使对于静态存档,.la
文件也绝对没用。
作为参考,我已经写了很多关于这个主题的内容: