来自autoconf测试的错误编译命令

Bad compilation command from autoconf test

本文关键字:编译 命令 错误 autoconf 测试 来自      更新时间:2023-10-16

我正试图为C++库编写一个autoconf测试。我紧随其后http://nerdland.net/2009/07/detecting-c-libraries-with-autotools/。我的支票是这样的:

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

测试失败。如果我检查config.log,问题似乎是autoconf为检查提供的生成编译命令:

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

正如您所看到的,在所有的输入和输出之后,-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

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