无法将LDFLAGS传递给autoconf测试(AC_LINK_IFELSE)

时间:2014-06-06 12:09:25

标签: autotools autoconf

我试图编写一个autoconf检查,看看我是否可以从我正在开发的库链接到另一个基础库。我的支票是:

AC_SUBST([LIBS],["${LIBS} -lMyLib"])
AC_LINK_IFELSE(
  [AC_LANG_PROGRAM([#include <mylib/library.hpp>],
    [testFunction()])],
  [AC_DEFINE([HAVE_MYLIB],[1],[Do we have libMyLib?])],
  [AC_MSG_ERROR([Please install libMyLib before trying to build libMyLibJNI.])])

如果libMyLib安装在某个标准位置,则此工作正常。如果我构建libMyLib并将其安装在非标准目录中,那么即使我将LDFLAGS传递给配置脚本,此检查也会失败:

$ LDFLAGS="${PWD}/../target/cpp/lib" ./configure --prefix="${PWD}/../target/cpp"
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
...
configure: error: Please install libMyLib before trying to build libMyLibJNI.

如何通过LDFLAGS配置测试?

1 个答案:

答案 0 :(得分:0)

您需要将-L选项传递给LDFLAGS,而不仅仅是路径;我还建议将变量传递给./configure而不是环境:

$ ./configure --prefix="${PWD}/../target/cpp" LDFLAGS="-L${PWD}/../target/cpp/lib"

或者,您也可以将它传递给LIBS,因为搜索路径可以正确地传递给任何变量(这两个变量是相同的,除了它们在链接器命令行中传递的位置,但在在搜索路径的情况下,任一位置都很好。)

此外,您的支票中至少有一个错误:您不应该使用AC_SUBST,而只需设置LIBS="${LIBS} -lMyLib(替换将始终发生)。但更重要的是,如果您可以在不包含标题的情况下检查您的功能,那么您应该使用AC_CHECK_LIB