我试图编写一个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配置测试?
答案 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
。