未定义的sqrt引用(或其他math函数)

我有这个简单的代码:

max = (int) sqrt (number); 

并在头上我有:

 #include <math.h> 

但是应用程序仍然说对sqrt未定义引用。 你有什么问题吗? 它看起来像一切应该没问题。

你可能会发现你必须在任何你使用的系统上连接math库,例如:

 gcc -o myprog myprog.c -L/path/to/libs -lm ^^^ - this bit here. 

包含头文件让编译器知道函数声明,但不一定会自动链接到执行该函数所需的代码。

否则,你需要向我们展示你的代码,你的编译命令和你正在运行的平台(操作系统,编译器等)。

以下代码编译并链接正常:

 #include <math.h> int main (void) { int max = sqrt (9); return 0; } 

请注意, 一些编译系统依赖于在命令行中给出库的顺序。 因此,我的意思是说,他们可能会按顺序处理这些库,只能用它们来满足序列中当时未解决的符号

所以,例如,给定的命令:

 gcc -o plugh plugh.o -lxyzzy gcc -o plugh -lxyzzy plugh.o 

plugh.o需要xyzzy库中的东西,第二个可能无法按照您的预期工作。 在列出库的时候,没有未解决的符号可以满足。

而当来自plugh.o的未解决符号确实出现时, plugh.o已晚。

我想你已经用#include <math.h>导入了math.h

所以我唯一能看到的其他原因就是缺less链接信息 。 您必须将您的代码与-lm选项相关联。

如果你只是想用gcc来编译一个文件,只需要在你的命令行中加上-lm ,否则,给出关于你的构build过程的一些信息。

我有同样的问题,但我只是通过在运行我的代码的命令后面加上-lm来解决它。 例。 gcc code.c -lm

只要将c源文件中的#include <math.h>和Makefile中的-lm加在一起就可以工作。

  gcc -pthread -o p3 p3.c -lm