C 对“sin';”的未定义引用;,即使我使用<;数学h>;和-lm

C 对“sin';”的未定义引用;,即使我使用<;数学h>;和-lm,c,linker-errors,undefined-reference,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

我注意到,当我在函数中使用
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;
}
#包括
#包括
#包括
#包括
浮动窦(浮动a){
返回罪(a);}
int main(int argc,字符**argv)
{
双a=窦(2);
printf(“%f\n”,sin(2));
printf(“%f”,a);
返回0;
}
如果我直接在main中使用它,它工作得很好,但是在用户定义的函数中,它给了我这个错误
对sin的未定义引用


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

对库的引用通常放在命令行的末尾,特别是在指定了源之后:

gcc -Wall -o "%e" "%f" -lm 
(不需要指定C库,它是隐式链接的)

从:

-图书馆

[……]

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


对库的引用通常会转到命令行的末尾,特别是在指定源之后:

gcc -Wall -o "%e" "%f" -lm 
(不需要指定C库,它是隐式链接的)

从:

-图书馆

[……]

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


您构建的系统/环境是什么?添加
-lc
-lgcc
几乎肯定没有必要。。。什么是
%e
%f
?我在ubuntu中使用的是geany,这是gcc版本
gcc版本7.4.0(ubuntu 7.4.0-1ubuntu1~18.04.1)
%e
是没有.c的文件名,
%f
是文件名。cThen@alk的评论是你要找的(他/她应该写下来作为答案).谢谢大家的评论。把对库的引用放在最后解决了这个问题。祝大家节日快乐@阿纳斯贝尔法迪尔见。不要发布“谢谢”,只需接受带有复选标记的正确答案(当SO允许您这样做时)。您构建的系统/环境是什么?添加
-lc
-lgcc
几乎肯定没有必要。。。什么是
%e
%f
?我在ubuntu中使用的是geany,这是gcc版本
gcc版本7.4.0(ubuntu 7.4.0-1ubuntu1~18.04.1)
%e
是没有.c的文件名,
%f
是文件名。cThen@alk的评论是你要找的(他/她应该写下来作为答案).谢谢大家的评论。把对库的引用放在最后解决了这个问题。祝大家节日快乐@阿纳斯贝尔法迪尔见。不要写“谢谢”,只要用复选标记接受正确的答案(如果允许的话)。