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