【发布时间】: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 代码。默认库是另一个这样的问题。 -
而且您没有声明您在两个系统上使用相同的构建工具。正如我已经指出的,这是一个构建问题,而不是编译器问题。