Linker 我真的需要指定与automake链接的库位置吗?

Linker 我真的需要指定与automake链接的库位置吗?,linker,autoconf,automake,Linker,Autoconf,Automake,我正在一个多平台C程序上工作。由于每台机器上的编译器、库位置等不同,生成文件变得相当复杂。我认为Autoconf/Automake将是一个很好的解决方案,尽管我以前使用这些工具的经验很少 我的Makefile.am有一行LIBS=-lX11,但是链接失败,出现错误“/usr/bin/ld:找不到-lX11”。我可以通过在LIBS的定义中添加“-L/usr/X11R6/lib/”来解决这个问题,但我真的需要这样做吗?当我运行/configure时,它会显示: 正在检查X。。。库/usr/X11R6

我正在一个多平台
C
程序上工作。由于每台机器上的编译器、库位置等不同,生成文件变得相当复杂。我认为
Autoconf/Automake
将是一个很好的解决方案,尽管我以前使用这些工具的经验很少

我的
Makefile.am
有一行
LIBS=-lX11
,但是链接失败,出现错误
“/usr/bin/ld:找不到-lX11”
。我可以通过在
LIBS
的定义中添加
“-L/usr/X11R6/lib/”
来解决这个问题,但我真的需要这样做吗?当我运行
/configure
时,它会显示:

正在检查X。。。库/usr/X11R6/lib,头/usr/X11R6/include


所以看来汽车制造商应该知道在哪里可以找到它。由于
X11 libs
将位于每台机器上的不同位置,我是否可以在不必硬编码的情况下引用其在
Makefile.am中的位置?

您的Makefile.am不应设置libs。如果需要链接库,configure.ac应包含对库的检查,配置脚本将相应地设置LIBS。此外,Makefile.am不应指定库的路径。每个系统都应该进行配置,以便预编译器可以找到头,链接器可以找到库。如果系统没有设置为链接器可以找到库,正确的解决方案是用户在LDFLAGS中指定位置,而不是在Makefile.am中硬编码。(例如,不要将-L/p/a/t/h添加到Makefile中,而应该将LDFLAGS=-L/p/a/t/h添加到configure的调用中。)

谢谢您的提示。我有一个AC_CHECK_LIB(X11,XOpenDisplay),但当它无法编译时,我试图通过改变LIBS来修复它。事实证明,我忽略了./configure所说的在X11库中找不到XOpenDisplay函数的位置。这可能是真正的问题。