我真的需要为与 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.amLIBS=-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 链接指定库位置吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 automake 安装文件名设置为与原始文件名不同

automake 和 libtool 中的链接库问题

如何通过 autoconf/automake 排除 boost 库/头文件包含问题?

用于创建库和使用它的程序的 automake

生成一个 Makefile,使用 Automake 一步编译和链接所有源文件

如何将共享库与 --as-needed 与 automake 链接?