未定义的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