ANSI-C pow功能和类型铸造
问题描述:
下面这个简单的程序不会因为某些原因而构建。它说“未定义的pow参考”,但包含数学模块,我用-lm标志构建它。如果我使用像pow这样的pow(2.0,4.0),它会生成,所以我怀疑我的类型转换有问题。ANSI-C pow功能和类型铸造
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
printf("2 to the power of %d = %f\n", i, pow(2.0, (double)i));
}
return EXIT_SUCCESS;
}
这里是bulid日志:
**** Build of configuration Debug for project hello ****
make all
Building file: ../src/hello.c
Invoking: GCC C Compiler
gcc -O0 -g -pedantic -Wall -c -lm -ansi -MMD -MP -MF"src/hello.d" -MT"src/hello.d" -o "src/hello.o" "../src/hello.c"
Finished building: ../src/hello.c
Building target: hello
Invoking: GCC C Linker
gcc -o "hello" ./src/hello.o
./src/hello.o: In function `main':
/home/my/workspace/hello/Debug/../src/hello.c:19: undefined reference to `pow'
collect2: ld returned 1 exit status
make: *** [hello] Error 1
**** Build Finished ****
答
你告诉它使用数学库在错误的地方 - 你指定的数学库编译时(在那里赢得没有帮助),但在链接时(实际需要的地方)将它排除在外。您需要在链接时指定它:
gcc -o "hello" ./src/hello.o -lm
杰里的说法是,您没有在链接阶段传递它。请参阅'Invoking:GCC C Linker'后面的行。也许你可以发布你的Makefile? – 2012-03-20 14:52:39
谢谢K.G.我正在使用Eclipse,因此我没有将-lm参数添加到GCC C链接器设置中,而是添加到了GCC C编译器设置中。在链接阶段传递它解决了这个问题。 – pocoa 2012-03-20 14:56:19