【问题标题】:AC_CHECK_LIB does not find library but compilation runs anywayAC_CHECK_LIB 没有找到库,但编译仍然运行
【发布时间】:2013-11-22 11:19:44
【问题描述】:

我正在向一个库项目添加自动工具支持。它依赖于另一个不一定在默认库路径中的自写库。所以我会在配置的时候设置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 的含义还是我做错了什么?

【问题讨论】:

  • 这个AC_CHECK_LIB 对我来说似乎意味着libfoo可选 并且可以使用或不使用它来构建代码(HAVE_FOO 未定义,代码将“解决”没有libfoo)。如果libfoo 真的是必需的,它应该会出错而不是警告。

标签: shared-libraries autotools autoconf


【解决方案1】:

AC_CHECK_LIB 不在乎您对图书馆的存在或不存在附加什么结论。它只是确定库是否存在,如果存在则执行其第三个参数,如果不存在则执行其第四个参数。

所以得到你想要的逻辑取决于你。如果您在第四个参数中将AC_MSG_WARN 替换为AC_MSG_ERROR,正如ldav1s 在评论中所建议的那样,那么如果检查失败,配置脚本将中止,并且代码将无法编译。

【讨论】:

  • 这很清楚...但是 GCC 找到了该库,而 AC_CHECH_LIB 失败了。这就是困扰我的地方。错误将是假阴性。
  • 哦,我明白现在的问题了。那么这个答案可能不是很有用。
猜你喜欢
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
相关资源
最近更新 更多