21

将 Ubuntu 从 11.10 升级到 11.10 后出现了一些奇怪的错误(10.11, 11.04 i dont know)

我正在undefined reference to 'sqrt'使用 math.h并与 -lm 链接

我正在使用gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o两个源文件进行编译,并包含 math.h。

这段代码编译没有问题,自升级以来我没有太大变化,但现在它不起作用。

你有什么建议我能做些什么来找到错误吗?

对不起,如果以前有人问过这个问题;有很多关于数学链接器错误的帖子,我没有找到匹配的

4

5 回答 5

27

当您从命令行使用它时,您正在使用的库需要放在使用它的文件之后。所以放在-lm命令行上的 C 文件之后。

参考

于 2011-10-19T16:25:29.943 回答
17

已解决,这不是常见的缺失-lm问题!升级到 (k)ubuntu 11.10 后,我处于同样的情况!

$ whereis math.h
math: /usr/include/math.h

Makefile:
CC=gcc
CFLAGS=--std=c99 -g -pedantic -Wall -lm

uname:
Linux idefix 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

你真的必须在-o foo foo.c参数之后放置-lm开关

Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$

所以在 Makefile 中交换你的标志!伙计们。这是相当新的(和严重的)BUG!

于 2011-11-09T11:41:53.190 回答
10

这是由于--as-needed链接器中 gcc 标志的默认激活导致的问题

更多信息在这里:http ://www.gentoo.org/proj/en/qa/asneeded.xml

简单的修复(至少对我有用):

添加-Wl,--no-as-needed到链接器

于 2011-11-09T15:06:35.257 回答
4

将我的 Ubuntu 升级到 11.10 版本后,我发现了同样的问题。我使用 Netbeans 通过指定“数学”标准库来开发和解决问题,如下所示:

右键单击项目,单击属性,在菜单上选择“链接器”,单击“库”,然后单击“添加标准库”,选择“数学”。

编译时,'-lm' 选项放在所有其他选项之后,它可以工作。可能这个 gcc 版本遵循特定的体系结构,它期望库位于命令编译行的末尾。

干杯!

D.

于 2012-11-15T15:26:59.140 回答
2
cc filename.c -lm

试试吧…………☻</p>

于 2013-06-14T07:38:21.170 回答