我将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。
此代码编译没有问题,自升级以来我没有太大变化,但现在它不起作用。
您有什么建议我可以做,找到错误吗?
对不起,如果之前有人问这个问题;关于数学链接器错误的帖子太多了,我没找到匹配的
答案 0 :(得分:27)
当您从命令行使用它时,您正在使用的库需要放在使用它的文件之后。因此,在命令行上的C文件之后放置-lm
。
答案 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
试试..........☻