C-即使使用“ -lm”,也未定义对“ sqrt”的引用

亚历山大·皮埃尔(Alexandre Pieroux)

我尝试用C编译需要“ math.h”的库,这是.c文件的开头:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h> 
#include "sparse_matrix.h"
...

然后使用以下命令进行编译:

gcc -c ./sparse_matrix.c -o sparse_matrix.o -lm -Wall -pedantic -std=c99 -g -O

但是即使在文件后面加上#include完成标记和标志-lm(我已经在行尾尝试过,但没有任何改变),我仍然收到错误:undefined reference to « sqrt » collect2: error: ld returned 1 exit status

搜寻了一个小时后,我没有收到。我正在Ubuntu 14.10(Utopic Unicorn)下使用gcc 4.9。预先感谢您的任何帮助!

紫罗兰色

我不认为这您正在运行的命令(嗯,它可能是其中之一,但肯定不是导致您出错的命令)。

告诉它仅创建目标文件-c选项gcc(并且您专门将输出发送到sparse_matrix.o对象文件,而不是可执行文件)。

在这种情况下,根本应该调用链接器

实际上,带有以下sparse_matrix.c项:

#include <math.h>
int main(void) {
    return (int)(sqrt(16.0));
}

您的命令运行正常,当我完成以下过程时:

pax> gcc -o sparse_matrix sparse_matrix.o -lm
pax> ./sparse_matrix
pax> echo $?
4

您会看到它也可以正常运行。

可能是您-lm没有在实际的链接阶段留下链接器标志(例如,这会导致此问题。它们对编译阶段没有影响(除非它们同时影响编译链接阶段,但-l不是其中之一)。

而且,通过“离开”,我还包括了“错位”的可能性。有些接头是定位在他们处理的,如果他们满足未定义的符号,他们将只提取库的对象库的方式在他们列出的点在哪里。

因此,命令:

linker sparse_matrix.o -lm ...

之所以.o有效sqrt,是因为该文件引入了不满意的引用,对此感到满意libm如果链接器位置链接器,则:

linker -lm sparse_matrix.o ...

之所以不起作用,是因为在处理时libm没有不满意的符号,因此没有提取任何内容。sqrt然后该点之后引入对undefined的引用,并且没有其他对象或库可以满足它。

无论是ldgcc连接器阶段有一个限制,我不知道,我只是提高的可能性的东西需要提防。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C:使用extern时未定义对变量的引用

来自分类Dev

Windows API编程,使用c:对OpenJobObject的未定义引用

来自分类Dev

C编译-“未定义引用”?

来自分类Dev

编译时出现错误“对“ sin”的未定义引用”(使用-lm)

来自分类Dev

在C ++中使用库时“未定义的引用”

来自分类Dev

C ++对模板方法的未定义引用

来自分类Dev

C- Readline()未定义引用

来自分类Dev

未定义对pthread创建的引用,即使使用lpthread

来自分类Dev

对WinMain的未定义引用(C ++ Mingw)

来自分类Dev

未定义对函数的引用?C ++

来自分类Dev

对C头文件的未定义引用

来自分类Dev

C-未定义的引用

来自分类Dev

C ++:对构造函数的未定义引用

来自分类Dev

使用命名空间C ++的未定义引用

来自分类Dev

在C ++中使用库时出现“未定义的引用”

来自分类Dev

未定义对函数c的引用

来自分类Dev

C ++对模板方法的未定义引用

来自分类Dev

C ++ Singleton:“未定义引用”错误

来自分类Dev

未定义对sqrt(geany)的引用

来自分类Dev

C ++“未定义引用”错误

来自分类Dev

未定义对'WinMain @ 16'的引用(C ++)

来自分类Dev

C ++:对ERROR的未定义引用

来自分类Dev

使用混合C和C ++的函数的未定义引用

来自分类Dev

未定义的函数引用(C ++)

来自分类Dev

C ++未定义的引用

来自分类Dev

C ++:对void函数的未定义引用

来自分类Dev

C Opengl中的未定义引用

来自分类Dev

未定义引用“ Class :: method”的C ++?

来自分类Dev

对C ++中函数的未定义引用