即使使用-lm标志,调用pow()函数仍存在未定义的参考错误

时间:2019-05-18 16:27:30

标签: c gcc compiler-errors math.h

我有一个名为 p1_exercise_12.c 的文件,该文件有时使用math.h库中的 pow()函数,并且还使用了线程。首先,我从终端执行 gcc -c p1_exercise_12.c 来生成相应的目标文件,该文件之所以有效,是因为我可以使用ls查看.o文件。然后我尝试通过执行来生成可执行文件

gcc -pthread -lm -o p1_exercise_12  p1_exercise_12.o

但是我得到了未定义的战俘错误参考。奇怪的是pthread_xxx()函数没有任何问题(应该不会因为我正在使用-pthread标志对吗?),但是尽管使用了-lm标志,pow也存在问题。

我知道我可以只使用gcc -o跳过生成目标文件,但是这是大学的功课,并且不允许使用chmod,所以我最终得到了无法使用的可执行文件。

这是.c文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <math.h>


#define N 3

typedef struct _prueba
{
  int n;
  double resultado;

}prueba;

void *dos_elevado_a_x (void *arg) {
  prueba* p = (prueba*) arg;
  p->resultado = pow(2,p->n);
  pthread_exit(NULL);
}

int main(int argc , char *argv[]) {
   pthread_t h[N];
   prueba* p[N];
   int i;

   for(i=0;i<N;i++){
    p[i] = ((prueba*) malloc(1*sizeof(prueba)));
    p[i]->n = N;
    p[i]->resultado = 0;
    pthread_create(h+i, NULL , dos_elevado_a_x , (void *)p[i]);
    pthread_join(h[i],NULL);


   }

   printf("El programa %s termino correctamente \n", argv[0]);
   exit(EXIT_SUCCESS);
}

0 个答案:

没有答案