Ubuntu 11.10 上的 c 数学链接器问题
当我将 Ubuntu 从 (10.11、11.04 我不知道)
升级到 11.10 后,出现了一些奇怪的错误。
我在使用 math.h 并与 -lm 链接时收到对“sqrt”的未定义引用
我正在使用 gcc -Wall -Werror -g - 进行编译Iinclude/ -lm lib/matrix.c src/analysis.c -o bin/analysis.o
两个源文件都使用并包含 math.h。
这段代码编译没有问题,并且自升级以来我没有进行太多更改,但现在它无法工作。
您对我能做什么来找到错误有什么建议吗?
如果之前有人问过这个问题,我很抱歉;有很多关于数学链接器错误的帖子,但我没有找到匹配的帖子
Some strange error appeared after I upgraded my Ubuntu from (10.11, 11.04 i dont know)
to 11.10.
I am getting an undefined reference to 'sqrt'
while using math.h and linking with -lm
I'm compiling with gcc -Wall -Werror -g -Iinclude/ -lm lib/matrix.c src/analyse.c -o bin/analyse.o
both source-files use and include math.h.
This code compiled without problems for and I didn't change much since the upgrade but now it won't work.
Do you have any suggestions what I can do, to find the error?
I'm sorry, if this question was asked before; there are so many posts on math linker errors and I didn't find a matching one
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
当您从命令行使用它时,您正在使用的库需要放置在使用它的文件之后。因此,请将
-lm
放在命令行上的 C 文件之后。参考
The library that you are using needs to be placed after the files that use it when you are using it from the command line. So place
-lm
on after your C files on the command line.Reference
已解决,这不是常见的缺失-lm问题!升级到 (k)ubuntu 11.10 后我也遇到同样的情况!
您确实必须将 -lm 开关放在 -o foo foo.c 参数之后
因此,请在 Makefile 中交换您的标志!伙计们。这是一个相当新的(而且严重的)BUG!
SOLVED, this is not the common missing -lm problem! I'm in the same situation after upgrade to (k)ubuntu 11.10!
You really HAVE TO place the -lm swith after -o foo foo.c parameter
So swap your flags in Makefile! GUYS. This is pretty new (and serious) BUG!
这是由于链接器中 gcc 标志
--as-needed
默认激活造成的问题更多信息:http://www.gentoo.org/proj/en/qa/asneeded.xml
简单修复(至少对我有用):
添加
-Wl,--no-as-needed
到链接器This is a problem due to the default activation of the gcc flag
--as-needed
in the linkerMore information here: http://www.gentoo.org/proj/en/qa/asneeded.xml
Simple fix (worked for me at least):
Add
-Wl,--no-as-needed
to the linker将 Ubuntu 升级到 11.10 版本后,我发现了同样的问题。
我使用 Netbeans 进行开发并通过指定“数学”标准库解决了问题,如下所示:
右键单击项目,单击“属性”,在菜单上选择“链接器”,单击“库”,然后选择“添加标准库” “数学”。
编译时,“-lm”选项放置在所有其他选项之后并且它可以工作。可能这个 gcc 版本遵循特定的体系结构,并且它期望库位于命令编译行的末尾。
干杯!
D .
I found the same problem after upgrading my Ubuntu to 11.10 version.
I use Netbeans for developing and solved the problem by specifying the "Mathematics" standard library as it follows:
Right click on project, click on Properties, select "Linker" on menu, click on "Libraries" and then "Add Standard Library" choosing "Mathematics".
When compiling the '-lm' option is placed after all the other options and it works. Probably this gcc version follows a specific architecture and it expects the libraries at the end of the command compiling line.
Cheers!
D.
尝试一下..............☻
just try..........☻