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

Ana*_*DIL 1 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;
}
Run Code Online (Sandbox Code Playgroud)

如果我直接在 main 中使用它,它工作正常,但在用户定义的函数中,它给了我这个错误undefined reference to sin

对于编译,我使用gcc -Wall -lm -lc -lgcc -o "%e" "%f".

alk*_*alk 5

对库的引用通常位于命令行的末尾,特别是指定源之后

gcc -Wall -o "%e" "%f" -lm 
Run Code Online (Sandbox Code Playgroud)

(指定 C lib 不是必需的,它是链接隐式的)

文档

-l

[...]

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