我遇到配置脚本验证是否存在某些基本功能的问题,
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平台考虑因素?
答案 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
实际上并没有错。)