AC_CHECK_LIB找不到库,但无论如何编译都在运行

时间:2013-11-22 11:19:44

标签: shared-libraries autotools autoconf

我正在为库项目添加autotool支持。它依赖于另一个自编写的库,它不一定在默认的库路径中。所以我在配置时会设置LDFLAGS。

尽管如此,我想检查库以警告用户正确设置LDFLAGS。因此我提出这一行:

AC_CHECK_LIB([foo], [foo_func],
         [AC_DEFINE([HAVE_FOO, [1],
                     [Define if you have libfoo])],
         [AC_MSG_WARN([libfoo not found.])])

现在,如果我没有设置LDFLAGS,则检查会按预期失败并打印警告。但是:当我运行make时,代码仍会编译,因为我在环境变量LD_LIBRARY_PATH中设置了库路径。我发现这令人困惑......我希望检查失败代码不能编译或检查不会失败代码编译。

我误解了AC_CHECK_LIB的含义或我做错了什么?

1 个答案:

答案 0 :(得分:1)

AC_CHECK_LIB并不关心你对图书馆存在与否的结论。它只是确定库是否存在并执行其第三个参数(如果是),如果不存在则执行第四个参数。

因此,获得您想要的逻辑取决于您。如果在第四个参数中将AC_MSG_WARN替换为AC_MSG_ERROR,如注释中的ldav1s所示,那么如果检查失败,则配置脚本将中止,并且代码将无法编译。