传递变量而不是常量时,未定义引用`sin'

时间:2014-01-21 12:13:00

标签: c linux gcc

我有一个代码在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;
}

Output 1

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;
}

Output 2

/tmp/ccfFXUZS.o: In function `main':
source-bcfaa9ff162b:(.text+0x1a): undefined reference to `sin'
collect2: error: ld returned 1 exit status

2 个答案:

答案 0 :(得分:11)

在某些系统上,数学函数位于一个单独的库中,需要明确链接。编译(链接)你的程序时,只需传递选项-lm,一切都应该有效。

第一个工作的原因是因为编译器知道sin并将整个事物优化为常量 - 它不需要实际调用sin函数。

答案 1 :(得分:2)

您需要与-lm链接。

我不知道为什么第一个例子正在运作 - 也许是一些优化?