在Ubuntu 11.10上的math连接器问题

一些奇怪的错误出现后,我的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 

试试……….☻