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

发布于 2024-12-10 19:17:50 字数 413 浏览 0 评论 0原文

当我将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

心不设防 2024-12-17 19:17:50

当您从命令行使用它时,您正在使用的库需要放置在使用它的文件之后。因此,请将 -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

深居我梦 2024-12-17 19:17:50

已解决,这不是常见的缺失-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

您确实必须将 -lm 开关放在 -o foo foo.c 参数之后

Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$

因此,请在 Makefile 中交换您的标志!伙计们。这是一个相当新的(而且严重的)BUG!

SOLVED, this is not the common missing -lm problem! I'm in the same situation after upgrade to (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

You really HAVE TO place the -lm swith after -o foo foo.c parameter

Output:
pidi@idefix:~/projekt1$ make
gcc -o b1 b1.c --std=c99 -g -pedantic -Wall -lm
pidi@idefix:~/projekt1$

So swap your flags in Makefile! GUYS. This is pretty new (and serious) BUG!

等待圉鍢 2024-12-17 19:17:50

这是由于链接器中 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 linker

More 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

她说她爱他 2024-12-17 19:17:50

将 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.

念﹏祤嫣 2024-12-17 19:17:50
cc filename.c -lm

尝试一下..............☻

cc filename.c -lm

just try..........☻

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文