问题描述
将我的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
编译source-files,并包含math.h.
这段代码编译没有问题,自升级以来我没有太大变化,但现在它不起作用。
你有什么建议我可以做,找到错误?
对不起,如果以前问过这个问题;关于数学链接器错误的帖子太多了,我找不到匹配的错误
最佳解决方法
当您从命令行使用它时,您正在使用的库需要放在使用它的文件之后。因此,在命令行上的C文件之后放置-lm
。
次佳解决方法
求助,这不是常见的缺失-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 swith
Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$
所以在Makefile中交换你的标志! GUYS。这是相当新的(和严重的)BUG!
第三种解决方法
由于链接器中的gcc标志--as-needed
的默认激活,这是一个问题
更多信息:http://www.gentoo.org/proj/en/qa/asneeded.xml
简单修复(至少对我有用):
将-Wl,--no-as-needed
添加到链接器
第四种方法
将Ubuntu升级到11.10版本后,我发现了同样的问题。我使用Netbeans进行开发并通过指定”Mathematics”标准库来解决问题:
右键单击项目,单击Properties,在菜单上选择”Linker”,单击”Libraries”,然后选择”Mathematics”“Add Standard Library”。
当编译’-lm’选项放在所有其他选项之后并且它可以工作。可能这个gcc版本遵循特定的体系结构,它期望命令编译行末尾的库。
干杯!
D.
第五种方法
cc filename.c -lm
试试……….☻