【问题标题】:Error: undefined reference to math functions [duplicate]错误:对数学函数的未定义引用[重复]
【发布时间】:2013-12-18 17:32:18
【问题描述】:

这是函数指针程序:demo.c

#include <stdio.h>
#include <math.h>

void tabulate(double (*f)(double), double first, double last, double incr);

int main(void) {

    double final, increment, initial;

    printf("Enter initial value: ");
    scanf("%lf", &initial);

    printf("Enter final value: ");
    scanf("%lf", &final);

    printf("Enter increment: ");
    scanf("%lf", &increment);

    printf("\n      x       cos(x)"
           "\n   -------    -------\n");
    tabulate(cos, initial, final, increment);
    return 0;
}

void tabulate(double (*f)(double), double first, double last, double incr) {
    double x;
    int i, num_intervals;

    num_intervals = ceil((last - first)/incr);
    for(i=0; i<=num_intervals; i++) {
        x = first + i * incr;
        printf("%10.5f %10.5f\n", x, (*f)(x));
    }
}

当我尝试运行此代码时,收到此消息:

/tmp/ccQ4IZeD.o: In function `main':
demo.c:(.text+0x92): undefined reference to `cos'
/tmp/ccQ4IZeD.o: In function `tabulate':
demo.c:(.text+0xe3): undefined reference to `ceil'
collect2: error: ld returned 1 exit status

什么意思,因为cos和ceil是&lt;math.h&gt;文件函数。 这是因为操作系统(ubuntu 13.10 32 位),因为这个程序是在其他系统上工作的。

如果是,那么在我的系统上运行什么解决方案。

【问题讨论】:

  • 您还需要链接math 库,将-lm 传递给您的编译器。
  • @Rohit 你把-lm 放在你的源文件之后吗,例如gcc demo.c -lm
  • 问题已解决,谢谢。

标签: c function pointers


【解决方案1】:

你必须在链接时使用-lm

【讨论】:

    【解决方案2】:

    由于与内核的集成问题,数学库未集成到标准 gcc 库中。 编译代码时必须使用-lm

    【讨论】:

      【解决方案3】:

      这是因为您的math 库函数未与程序链接。要将其链接到 -lm 标志编译。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 2017-02-27
        • 2015-01-09
        • 1970-01-01
        • 2012-05-24
        相关资源
        最近更新 更多