我有两段代码,除了一行之外都相同。一个程序编译失败,另一个程序编译成功。当我执行 cc 编译代码时,我确实链接了数学库。
我正在使用该double sin(double)
功能。它显然是在 math.h 中定义的,尽管我查看了 /usr/include/math.h 并没有发现对该sin()
函数的引用。
见http://www.gnu.org/software/libc/manual/html_mono/libc.html#Trig-Functions
该sin()
函数在我给出的一个代码段中确实有效,但在另一个代码段中无效。
//Successful program - demo1.c
#include <stdio.h>
#include <math.h>
int main (void)
{
double input, sine_A;
input = 6.2830;
sine_A = sin(6.2830);
printf("sine=%f\n",sine_A);
return 0;
}
这是失败的程序:
//Failed program - demo2.c
#include <stdio.h>
#include <math.h>
int main (void)
{
double input, sine_A;
input = 6.2830;
sine_A = sin(input);
printf("sine=%f\n",sine_A);
return 0;
}
$ cc -lm demo2.c
/tmp/ccnpIWZd.o: In function `main':
demo2.c:(.text+0x1c): undefined reference to `sin'
collect2: ld returned 1 exit status
这让我感觉有点愚蠢,或者至少,我觉得这些年来我错过了一些东西。