autotools - AC_CHECK_FUNCS 的结果不一致

标签 autotools autoconf configure

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

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/

相关文章:

autotools - "configure"和 "config.status"是进程还是输入文件?

google-chrome - 在 Chrome 上配置 Selenium - Capybara

ios - 交叉编译静态库时,如何验证主机、目标等?

makefile - 在每个子目录(子 make)中的 Makefile.am 上使用相同的 CFLAGS

编译使用库的 C 程序

environment-variables - 检查配置脚本中是否设置了环境变量?

git - 使用 Autoconf 存档宏和其他 3rd 方宏的推荐方法

autoconf - autoconf和automake中的DEFS和CPPFLAGS有什么区别

Mysql配置/设置

python - 使用 autotools 为多个版本的 Python 构建和安装