我有一个名为 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);
}