相关疑难解决方法(0)

log(10.0)可以编译但是log(0.0)不能吗?

对于以下C源代码:

#include <math.h>

int main(void)
{
    double          x;

    x = log(0.0);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译时gcc -lm,我得到:

/tmp/ccxxANVH.o: In function `main':
a.c:(.text+0xd): undefined reference to `log'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

但是,如果我替换log(0.0)log(10.0),那么它可以成功编译.

我不太明白这一点,因为无论它们是否具有数学意义,它们都应该编译 - 没有语法错误.有人能解释一下吗?

以防万一,我的gcc -v输出:

Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 …
Run Code Online (Sandbox Code Playgroud)

c gcc math.h constantfolding

46
推荐指数
2
解决办法
2714
查看次数

gcc不会正确包含math.h

这是一个概述我的问题的最小例子

test.c的:

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

main ()
{
   fmod ( 3, 2 );
}
Run Code Online (Sandbox Code Playgroud)

这是我要编译的命令 test.c

gcc -lm test.c -o test
Run Code Online (Sandbox Code Playgroud)

这是我发出上述命令时得到的输出

/tmp/ccQmRk99.o: In function `main':
test.c:(.text+0x3e): undefined reference to `fmod'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

如果相反,我会使用相同的输出cc.我使用的是以下版本的gcc

gcc-4.6.real (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Run Code Online (Sandbox Code Playgroud)

我的程序无法编译的任何想法?

c linker gcc static-libraries

19
推荐指数
1
解决办法
6万
查看次数

错误:对数学函数的未定义引用

这是函数指针程序: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 …
Run Code Online (Sandbox Code Playgroud)

c pointers function

1
推荐指数
1
解决办法
1万
查看次数