【问题标题】:Do I really need to specify library location for linking with automake?我真的需要为与 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 将在每台机器上的不同位置?

【问题讨论】:

    标签: linker autoconf automake


    【解决方案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 函数的位置。这可能是这里真正的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多