来自AC_CHECK_FUNCS的结果不一致

时间:2011-01-20 16:17:02

标签: autotools autoconf configure

我遇到配置脚本验证是否存在某些基本功能的问题,

AC_CHECK_FUNCS([floor gettimeofday memset pow sqrt sin exp])

在某些标准下,结果是预期的(checking for x... yes)。否则,声称未定义上述数学函数。不同之处在于首先验证一些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平台考虑因素?

1 个答案:

答案 0 :(得分:2)

数学函数在数学库中,因此如果需要,您需要将数学库拉入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实际上并没有错。)