Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shared libraries AC_CHECK_LIB找不到库,但编译仍在运行_Shared Libraries_Autotools_Autoconf - Fatal编程技术网

Shared libraries AC_CHECK_LIB找不到库,但编译仍在运行

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

我正在向一个库项目添加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\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失败了。这就是困扰我的原因。错误是假阴性。哦,我知道问题是什么了。那么这个答案可能不是很有用。