在Ubuntu 11.10上有c数学链接器问题

时间:2011-10-19 16:11:07

标签: c gcc ubuntu linker math.h

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

我在使用math.h 并使用-lm

进行链接时获得undefined reference to 'sqrt'

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

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

您有什么建议我可以做,找到错误吗?

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

5 个答案:

答案 0 :(得分:27)

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

Reference

答案 1 :(得分: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中交换你的标志! GUYS。这是一个非常新的(和严重的)BUG!

答案 2 :(得分:9)

由于链接器

中默认激活gcc标志--as-needed,这是一个问题

此处提供更多信息:http://www.gentoo.org/proj/en/qa/asneeded.xml

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

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

答案 3 :(得分:3)

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

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

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

干杯!

d

答案 4 :(得分:2)

cc filename.c -lm

试试..........☻