未定义对`sin`的引用

我有以下代码(简化为该问题的基本知识):


#include<stdio.h>

#include<math.h>


double f1(double x)

{

    double res = sin(x);

    return 0;

}


/* The main function */

int main(void)

{

    return 0;

}

使用它进行编译时,gcc test.c出现以下错误,并且我无法找出原因:


/tmp/ccOF5bis.o: In function `f1':

test2.c:(.text+0x13): undefined reference to `sin'

collect2: ld returned 1 exit status

但是,我编写了sin从main功能内部调用的各种测试程序,这些程序运行良好。我肯定在这里做错了什么-那是什么?


繁星淼淼
浏览 1554回答 3
3回答

慕尼黑5688855

无论如何我还是有问题-lmgcc -Wall -lm mtest.c -o mtest.omtest.c: In function 'f1':mtest.c:6:12: warning: unused variable 'res' [-Wunused-variable]/tmp/cc925Nmf.o: In function `f1':mtest.c:(.text+0x19): undefined reference to `sin'collect2: ld returned 1 exit status我最近发现,如果您首先指定-lm,它将不起作用。顺序很重要:gcc mtest.c -o mtest.o -lm链接无问题因此,您必须在之后指定库。

繁华开满天机

请注意,Mac(运行Mac OS X或macOS)上的系统库包含数学函数。有一个库可以满足对内部-lm版本的引用,但是您无需使用它-lm来链接数学函数。导致数学库与其他数学库分离的主要问题是CPU并不总是内置浮点数。有浮点协处理器(80387等),因此有很多方法提供功能(使用软件浮点库或使用硬件,并提供不同的支持)。
打开App,查看更多内容
随时随地看视频慕课网APP