在Ubuntu 11.10上的数学链接器问题

Hac*_*chi 21 c ubuntu linker gcc math.h

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

我正在undefined reference to 'sqrt'使用math.h 并使用-lm进行链接

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

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

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

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

use*_*653 27

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

参考

  • @VladimirPrus:你们都是对的:-).最近的Ubuntu版本(从11.04/Natty Narwhal开始)将--as-needed设置为默认值.请参阅https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition (2认同)

qui*_*edy 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
Run Code Online (Sandbox Code Playgroud)

你真的必须在-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$
Run Code Online (Sandbox Code Playgroud)

所以在Makefile中交换你的标志!GUYS.这是相当新的(和严重的)BUG!

  • 如果这是解决方案,您应该将其标记为已接受! (4认同)

小智 9

由于--as-needed链接器中gcc标志的默认激活,这是一个问题

更多信息请访问:http://www.gentoo.org/proj/en/qa/asneeded.xml

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

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