我有一个代码在Windows中完美运行但是当我尝试在linux中编译它时出现错误。我发现问题出在sin()
函数上。
如果我直接传递给它一个常数,它可以正常工作:
#include <stdio.h>
#include <math.h>
int main(void) {
float y = sin(1.57);
printf("sin(1.57) = %f", y);
return 0;
}
sin(1.57) = 1.000000
但是当我传递给它变量时,我得到一个错误:
#include <stdio.h>
#include <math.h>
int main(void) {
float x = 1.5;
float y = sin(x);
printf("sin(%f) = %f", x, y);
return 0;
}
/tmp/ccfFXUZS.o: In function `main':
source-bcfaa9ff162b:(.text+0x1a): undefined reference to `sin'
collect2: error: ld returned 1 exit status
答案 0 :(得分:11)
在某些系统上,数学函数位于一个单独的库中,需要明确链接。编译(链接)你的程序时,只需传递选项-lm
,一切都应该有效。
第一个工作的原因是因为编译器知道sin并将整个事物优化为常量 - 它不需要实际调用sin函数。
答案 1 :(得分:2)
您需要与-lm
链接。
我不知道为什么第一个例子正在运作 - 也许是一些优化?