Shared libraries AC_CHECK_LIB找不到库,但编译仍在运行
我正在向一个库项目添加autotool支持。它依赖于另一个自行编写的库,该库不一定位于默认库路径中。因此,我将在配置时设置LDFLAGS 尽管如此,我还是希望检查库以警告用户正确设置LDFLAGS。因此,我在这行加上:Shared libraries AC_CHECK_LIB找不到库,但编译仍在运行,shared-libraries,autotools,autoconf,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_WAR
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\u library\u path
中设置了库路径。我觉得这令人困惑。。。我希望检查失败并且代码不编译,或者检查不失败并且代码编译
我是否误解了AC_CHECK_LIB的意思,或者我做错了什么
AC_CHECK_LIB
不关心您对库的存在或不存在得出什么结论。它只确定库是否存在,如果存在,则执行第三个参数,如果不存在,则执行第四个参数
因此,你需要的逻辑取决于你自己。如果按照ldav1s在注释中的建议,将第四个参数中的
AC_MSG_WARN
替换为AC_MSG_ERROR
,则如果检查失败,配置脚本将中止,代码不会编译。这个AC_CHECK_LIB
对我来说似乎意味着libfoo
是可选的,代码可以用它来构建,也可以不用它来构建(HAVE_FOO
没有定义,代码将“绕过”没有libfoo
)。如果确实需要libfoo
,它应该会出错而不是警告。这很清楚。。。但是这个库是由GCC找到的,而AC_CHECH_LIB失败了。这就是困扰我的原因。错误是假阴性。哦,我知道问题是什么了。那么这个答案可能不是很有用。