ANSI-C Pow функция и тип литья - PullRequest
2 голосов
/ 20 марта 2012

Эта простая программа ниже по какой-то причине не собирается.Там написано "неопределенная ссылка на pow", но математический модуль включен, и я собираю его с флагом -lm.Он собирается, если я использую pow, например pow (2.0, 4.0), поэтому я подозреваю, что что-то не так с моим приведением типа.

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

Вот лог журнала:

**** 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 ****

1 Ответ

3 голосов
/ 20 марта 2012

Вы сказали ей использовать библиотеку математики не в том месте - вы указываете библиотеку математики при компиляции (где это не поможет), но не используете ее, когда ссылаетесь (там, где это действительно необходимо),Вам необходимо указать это при ссылке:

gcc -o "hello" ./src/hello.o -lm
...