我注意到,当我在函数内部使用sin
时,编译器无法识别它,这是一个示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
float sinus(float a){
return sin(a);}
int main(int argc, char **argv)
{
double a = sinus(2);
printf("%f \n", sin(2));
printf("%f", a);
return 0;
}
如果我直接在main中使用它,则可以正常工作,但是在用户定义的函数中,它会给我这个错误undefined reference to sin
。
对于编译,我使用gcc -Wall -lm -lc -lgcc -o "%e" "%f"
。
答案 0 :(得分:4)
对库的引用通常在命令行末尾,尤其是在 指定源之后:
gcc -Wall -o "%e" "%f" -lm
(指定C库不是必需的,这是隐含的链接)
-l <em>库
[...]
在命令中写入此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,“ foo.o -lz bar.o”在文件foo.o之后但在bar.o之前搜索库“ z”。如果bar.o引用了“ z”中的函数,则可能不会加载这些函数。