当前位置: 首页>>技术问答>>正文


在Ubuntu 11.10上有c数学链接器问题

, , , ,

问题描述

将我的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

Reference

次佳解决方法

求助,这不是常见的缺失-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

试试……….☻

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6885.html,未经允许,请勿转载。