Way*_*int 57 c linker-errors undefined-reference
我有这个简单的代码:
max = (int) sqrt (number);
Run Code Online (Sandbox Code Playgroud)
在标题中我有:
#include <math.h>
Run Code Online (Sandbox Code Playgroud)
但应用程序仍然表示未定义的引用sqrt.你觉得这里有什么问题吗?看起来一切都应该没问题.
pax*_*blo 87
您可能会发现必须在您使用的任何系统上链接数学库,例如:
gcc -o myprog myprog.c -L/path/to/libs -lm
^^^ - this bit here.
Run Code Online (Sandbox Code Playgroud)
包括标题让编译器知道函数的声明,但它并没有必然自动链接到执行该功能所需要的代码.
如果做不到这一点,您需要向我们展示您的代码,编译命令以及您正在运行的平台(操作系统,编译器等).
以下代码编译并链接正常:
#include <math.h>
int main (void) {
int max = sqrt (9);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,某些编译系统依赖于命令行中给定库的顺序.由此,我的意思是他们可以按顺序处理库,只使用它们来满足序列中该点的未解析符号.
因此,例如,给定命令:
gcc -o plugh plugh.o -lxyzzy
gcc -o plugh -lxyzzy plugh.o
Run Code Online (Sandbox Code Playgroud)
并且plugh.o要求xyzzy库中的某些东西,第二个可能无法按预期工作.在列出库的位置,没有未满足的未解析符号.
当从解析的符号plugh.o 都出现,为时已晚.
krt*_*tek 24
我想你已经导入了math.h #include <math.h>
因此,我能看到的另一个原因是缺少链接信息.您必须将代码与-lm选项相关联.
如果您只是尝试使用gcc编译一个文件,只需添加-lm到命令行,否则,请提供有关构建过程的一些信息.