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

Ubuntu 11.10上的c数学链接器问题,c,gcc,ubuntu,linker,math.h,C,Gcc,Ubuntu,Linker,Math.h,在我将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 这段代码编译时没有问题,升级后我没有做太多更改,但现在它无法工作 你有什么建议,我可以做什么,找到错误 对不起,如果这个问题

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

这段代码编译时没有问题,升级后我没有做太多更改,但现在它无法工作

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


对不起,如果这个问题以前被问过;关于math linker错误的帖子太多了,我没有找到匹配的帖子

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


已解决,这不是常见的缺少-lm的问题!升级到Ubuntu11.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中交换你的标志吧!伙计们。这是一个新的(严重的)错误

这是一个问题,因为链接器中默认激活了gcc标志
——根据需要

更多信息请点击此处:

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


-Wl,--no按需添加到链接器中
我在将Ubuntu升级到11.10版本后发现了相同的问题。 我使用Netbeans开发并通过指定“数学”标准库解决了这个问题,如下所示:

右键单击项目,单击属性,选择菜单上的“链接器”,单击“库”,然后选择“数学”,选择“添加标准库”

编译时,将“-lm”选项放在所有其他选项之后,它就可以工作了。这个gcc版本可能遵循一个特定的体系结构,它希望库位于命令编译行的末尾

干杯

D


试试。。。。。。。。。。☻

-lm
放在命令行上的C文件之后这是一个非常愚蠢的失败;多谢各位much@user786653:这应该是一个答案。我在Ubuntu 11.10中也有同样的问题。升级之前我没有任何问题。在我的情况下,问题来自下面的命令,你对我有什么意见吗?gcc-Wall-Wno unused-MD-o mems_seektest mems_seektest.o-lm-L-g-DASSERTS-I../src/-I../I../src//src-DDEBUG-lmems_内部这是不准确的。通常,在共享库时,顺序并不重要。只有在指定--as needed或将其设置为默认值时,问题才会出现。@VladimirPrus:你们都是对的:-)。最近的Ubuntu版本(从11.04/Natty Narhall开始)设置为默认值。见@sleske erg。。现在这是个错误?根据设计,相当多的工具通道总是将文件列表放在命令末尾(例如Qt)。这也给automake\cmakeSlight带来了更多的问题。这种方法的缺点是,如果不使用数学库,也会始终包含数学库。因此,如果你总是包含很多独立的库,不管它们是否被使用,就不要使用。酷,我喜欢“whereis”,在某些情况下,需要将-lm放在最后。
cc filename.c -lm