来自autoconf测试的错误编译命令 我试图为C++库编写一个AutoCONF测试。我跟着。我的支票是这样的: SAVED_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -lMyLib" AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include <mylibheader.hpp>], [MyLibNamespace::SomeObject obj()])], [TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1], [AC_MSG_ERROR([libMyLib is not installed.])]) LDFLAGS=$SAVED_LDFLAGS

来自autoconf测试的错误编译命令 我试图为C++库编写一个AutoCONF测试。我跟着。我的支票是这样的: SAVED_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -lMyLib" AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include <mylibheader.hpp>], [MyLibNamespace::SomeObject obj()])], [TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1], [AC_MSG_ERROR([libMyLib is not installed.])]) LDFLAGS=$SAVED_LDFLAGS,c++,autotools,autoconf,C++,Autotools,Autoconf,正如您所看到的,-l参数在所有输入和输出之后都不在末尾。如果我从config.log复制并粘贴conftest.cpp代码,我可以使用以下方法编译它: g++ -o conftest -g -O2 conftest.cpp -lMyLib autoconf怎么可能是错误的?如何解决此问题?问题是您将-lMyLib添加到LDFLAGS而不是添加到LIBS。换言之,请改为: SAVED_LIBS=$LIBS LIBS="-lMyLib $LIBS" AC_LINK_IFELSE( [AC_

正如您所看到的,-l参数在所有输入和输出之后都不在末尾。如果我从config.log复制并粘贴conftest.cpp代码,我可以使用以下方法编译它:

g++ -o conftest -g -O2  conftest.cpp -lMyLib 

autoconf怎么可能是错误的?如何解决此问题?

问题是您将
-lMyLib
添加到
LDFLAGS
而不是添加到
LIBS
。换言之,请改为:

SAVED_LIBS=$LIBS
LIBS="-lMyLib $LIBS"
AC_LINK_IFELSE(
  [AC_LANG_PROGRAM([#include <mylibheader.hpp>],
    [MyLibNamespace::SomeObject obj()])],
  [TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1],
  [AC_MSG_ERROR([libMyLib is not installed.])])
LIBS=$SAVED_LIBS
SAVED_LIBS=$LIBS
LIBS=“-lMyLib$LIBS”
交流链路(
[AC#u LANG_计划([#包括],
[MyLibNamespace::SomeObject obj()]),
[TEST_LIBS=“$TEST_LIBS-lMyLib”][HAVE_MYLIB=1],
[AC_MSG_错误([libMyLib未安装。]]))
LIBS=$SAVED_LIBS

编辑:库的链接顺序很重要,因此我在其他库之前更新了
LIBS=
行以链接
MyLib
,如果有的话,假设MyLib可能依赖于其他库。

问题是您将
-lMyLib
添加到
LDFLAGS
而不是添加到
LIBS
。换言之,请改为:

SAVED_LIBS=$LIBS
LIBS="-lMyLib $LIBS"
AC_LINK_IFELSE(
  [AC_LANG_PROGRAM([#include <mylibheader.hpp>],
    [MyLibNamespace::SomeObject obj()])],
  [TEST_LIBS="$TEST_LIBS -lMyLib"] [HAVE_MYLIB=1],
  [AC_MSG_ERROR([libMyLib is not installed.])])
LIBS=$SAVED_LIBS
SAVED_LIBS=$LIBS
LIBS=“-lMyLib$LIBS”
交流链路(
[AC#u LANG_计划([#包括],
[MyLibNamespace::SomeObject obj()]),
[TEST_LIBS=“$TEST_LIBS-lMyLib”][HAVE_MYLIB=1],
[AC_MSG_错误([libMyLib未安装。]]))
LIBS=$SAVED_LIBS

编辑:库的链接顺序很重要,因此我更新了
LIBS=
行,将
MyLib
链接到其他库之前(如果有的话),假设
MyLib
可能依赖于其他库。

输入文件之前还是之后提供
-l
参数并不重要。实际错误是什么?它确实。。。如上所述,它在最后使用-lMyLib进行编译,但如果它在我的输入之前,则不会编译。在输入文件之前还是之后提供
-l
参数应该无关紧要。实际错误是什么?它确实。。。正如我上面所说的,它在最后用-lMyLib编译,但如果它在我的输入之前,则不会编译。这使得我在本测试之前在LDFLAGS中拥有的其余库在所有输入之后都会被回显(在更改之前,您建议它们在输入之前被回显)-lMyLib仍然会在他们之前打印:(其他库也不应该在LDFLAGS中。请参阅autoconf,其中说明“不要使用此变量将库名称(-l)传递给链接器;请改用LIBS。”谢谢,成功了!我在config.hpp中没有设置_MYLIB时遇到了问题,但至少它通过了。这使得我在本测试之前在LDFLAGS中拥有的其余库在所有输入之后都会被回显(在更改之前,您建议它们在它们之前被回显)。-lMyLib仍然会在它们之前被打印:(其他库也不应该在LDFLAGS中。请参阅autoconf,其中说明“不要使用此变量将库名称(-l)传递给链接器,而是使用LIBS。”谢谢,这很有效!我在config.hpp中没有设置_MYLIB时遇到了问题,但至少它确实传递了。