一些奇怪的错误出现后,我的Ubuntu (10.11, 11.04 i dont know)
升级到11.10。
我在使用math.h 和使用-lm链接时遇到了undefined reference to 'sqrt'
的undefined reference to 'sqrt'
我在编译gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o
这两个源文件都使用并包含math.h.
这个代码编译没有问题,自升级以来,我没有多less变化,但现在不能工作。
你有什么build议我可以做,find错误?
对不起,如果这个问题以前被问过; math链接器错误有这么多的post,我没有find一个匹配的
您正在使用的库需要放置在从命令行使用它的文件之后。 所以把-lm
放在命令行中的C文件之后。
参考
解决 ,这不是常见的缺失-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。 这是相当新的(和严重)的错误!
这是一个问题,因为链接器中--as-needed
默认激活gcc标志
更多信息在这里: http : //www.gentoo.org/proj/en/qa/asneeded.xml
简单的修复(至少为我工作):
添加-Wl,--no-as-needed
连接器
在将Ubuntu升级到11.10版后,我发现了同样的问题。 我使用Netbeans开发并通过指定“数学”标准库来解决问题,如下所示:
右键单击项目,单击属性,选择菜单上的“链接器”,点击“库”,然后选择“数学”添加标准库。
当编译'-lm'选项放在所有其他选项之后并且它工作时。 可能这个gcc版本遵循一个特定的体系结构,它期望在命令编译行末尾的库。
干杯!
D.
cc filename.c -lm
试试……….☻