【问题标题】:Autoreconf and <math.h> on LinuxLinux 上的 Autoreconf 和 <math.h>
【发布时间】:2016-01-24 14:44:33
【问题描述】:

在使用 Autoreconf (Autoconf) 时,如何传递“-lm”标志或指定要包含的库?

程序包含,我可以这样编译:

gcc -std=c99 myprogram -lm

但是当我编译 vi Autoreconf 时,我收到一条错误消息说

undefined reference to 'pow'
undefined reference to 'sqrt'
etc

问题出在 Linux 上,相同的程序在 OSX 上编译没有错误。

如何编辑 configure.ac 或 Makefile.am 以获取 gcc 的 -lm 标志?

【问题讨论】:

  • 正如您所写,它在 Linux 上也可以正确编译。 atuoconf 是构建工具,而不是编译器。所以,问题是,如果它也正确地构建在 OSX 上——使用相同的工具。
  • 可以,但在 Linux 上构建需要一些额外的标志,一个是 -lm,另一个是 -std=c99。
  • 你显然确实在两个系统上使用不同的工具。仅供参考:在 Mac 上,gcc 实际上调用了clang。这些是不同的编译器,因此它们可能具有不同的默认值并且可能需要不同的选项。一般来说,依赖工具的默认值是不好的做法。显然,您在 Linux 上使用的是 5 之前版本的 gcc,因为它具有 gnu90 默认值。使用更新的版本 5,您将获得默认的 gnu11,它也应该编译 C99 代码。默认库是另一个这样的问题。
  • 而且您没有声明您在两个系统上使用相同的构建工具。正如我已经指出的,这是一个构建问题,而不是编译器问题。

标签: c autoconf


【解决方案1】:

AC_SEARCH_LIBS([sqrt], [m]) 添加到您的configure.ac

【讨论】:

  • 还有documentation 用于ac_cv_search_sqrt(缓存)变量。
【解决方案2】:

将此行添加到您的 Makefile.am:

AM_LDFLAGS = -lm

这会将数学库链接到您的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2010-10-12
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多