我在验证一些基本功能是否存在的配置脚本时遇到问题,
AC_CHECK_FUNCS([floor gettimeofday memset pow sqrt sin exp])
在某些条件下,结果是预期的(正在检查 x... 是
)。否则,上面的数学函数声称未定义。不同之处在于首先调用验证一些 lapack 例程。这些由 AC_CHECK_LIB([lapack],[dsyev_],...
检查。如果不先进行这些检查,则上述数学函数将无法检查(最终编译工作)。
我已将配置脚本缩减为以下重现问题的内容,
AC_INIT([TEST], [0.0], [none@none.com])
#AC_CHECK_LIB([lapack],[dsyev_], , AC_MSG_FAILURE([Missing lapack]))
AC_CHECK_FUNCS([floor gettimeofday memset pow sqrt sin exp])
取消注释第二行会产生正确的视觉结果。我想由于某种原因没有包含或检查数学库。事实上,AC_CHECK_LIB([m],[exp])
工作正常。
这是什么原因,使用该指令的正确方法是什么?我应该遵守什么样的 x 平台注意事项?
最佳答案
数学函数在数学库中,因此如果您需要它们,您需要将数学库拉入 configure
使用的链接参数中。 AC_CHECK_LIB([m],[exp])
是一种方法。 AC_CHECK_LIB([lapack],...)
也有这种效果的原因是它很可能拉入 -lm
本身(不知道图书馆,但我读过它用于线性代数)。
我建议您避免使用 AC_CHECK_LIB
,而是使用 AC_SEARCH_LIBS
来获取可能不在标准 C 库中的函数。所以
AC_SEARCH_LIBS(exp, m)
AC_SEARCH_LIBS(dsyev_, lapack)
(但使用 AC_CHECK_LIB
实际上并没有错。)
关于autotools - AC_CHECK_FUNCS 的结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4749615/