我真的需要为与 automake 链接指定库位置吗?
Posted
技术标签:
【中文标题】我真的需要为与 automake 链接指定库位置吗?【英文标题】:Do I really need to specify library location for linking with automake? 【发布时间】:2011-08-08 16:19:32 【问题描述】:我正在开发一个多平台的C
程序。由于每台机器上所有不同的编译器、库位置等,makefile 变得相当复杂。我认为Autoconf/Automake
会是一个很好的解决方案,尽管我之前使用这些工具的经验很少。
我的Makefile.am
有LIBS=-lX11
行,但链接失败并出现错误"/usr/bin/ld: cannot find -lX11"
。我可以通过在LIBS
的定义中添加"-L/usr/X11R6/lib/"
来解决这个问题,但我真的需要这样做吗?当我运行./configure
时,它会说:
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
所以看起来 Automake 应该知道在哪里可以找到它。有没有办法我可以引用它在Makefile.am
中的位置而无需对其进行硬编码,因为X11 libs
将在每台机器上的不同位置?
【问题讨论】:
【参考方案1】:您的 Makefile.am 不应设置 LIBS。如果您需要与库链接,configure.ac 应该包含对库的检查,并且配置脚本将相应地设置 LIBS。此外,Makefile.am 不应指定库的路径。每个系统都应该进行配置,以便预编译器可以找到头文件,而链接器可以找到库。如果系统未设置为使链接器可以找到库,则正确的解决方案是让用户在 LDFLAGS 中指定位置,而不是在 Makefile.am 中硬编码某些内容。 (例如,您应该将 LDFLAGS=-L/p/a/t/h 添加到配置的调用中,而不是添加 -L/p/a/t/h 到 Makefile。)
【讨论】:
感谢您的提示。我在那里有 AC_CHECK_LIB(X11, XOpenDisplay) ,但是当它无法编译时,我尝试通过更改 LIBS 来修复它。事实证明,我忽略了 ./configure 说它在 X11 库中找不到 XOpenDisplay 函数的位置。这可能是这里真正的问题。以上是关于我真的需要为与 automake 链接指定库位置吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 autoconf/automake 排除 boost 库/头文件包含问题?