未定义对“ sin”的引用,即使我使用了<math.h>和-lm

时间:2019-12-27 17:12:37

标签: c linker-errors undefined-reference

我注意到,当我在函数内部使用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"

1 个答案:

答案 0 :(得分:4)

对库的引用通常在命令行末尾,尤其是在 指定源之后:

gcc -Wall -o "%e" "%f" -lm 

(指定C库不是必需的,这是隐含的链接)

来自documentation

  

-l <​​em>库

     

[...]

     

在命令中写入此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,“ foo.o -lz bar.o”在文件foo.o之后但在bar.o之前搜索库“ z”。如果bar.o引用了“ z”中的函数,则可能不会加载这些函数。