#include <pthread.h>
#include <stdio.h>
int sum;
void *runner(void *param); /* threads call this function */
int main(int argc, char *argv[])
{
pthread_t tid; /* the thread identifier */
pthread_attr_t attr; /* set of thread attributes */
if(argc != 2) {
fprintf(stderr, "usage: a.out <integer value>\n");
return -1;
}
if(atoi(argv[1]) < 0) {
fprintf(stderr, "%d must be >= 0\n", atoi(argv[1]));
return -1;
}
/* get the default attributes */
pthread_attr_init(&attr);
/* create the thread */
pthread_create(&tid, &attr, runner, argv[1]);
/* wait for the thread to exit */
pthread_join(tid, NULL);
printf("sum = %d\n", sum);
}
/* The thread will begin control in this function */
void *runner(void *param)
{
int i, upper = atoi(param);
sum = 0;
for(i=1; i <= upper; i++) sum += i;
pthread_exit(0);
}
这是我的书后面的代码
创建子线程并分配runner函数以累积数组中的值
但 gcc Multithread_Pthread.c 不起作用, gcc -pthread Multithread_Pthread.c 也不起作用。
是什么原因和解决方案?
哦,我忘记了每个命令的结果
使用 gcc Multithread_Pthread.c 错误
使用 gcc -pthread Multithread_Pthread.c 用法:a.out
是结果。
答案 0 :(得分:2)
试试这个:
$ gcc Multithread_Pthread.c -lpthread
答案 1 :(得分:2)
补充Ren的答案:你应该在链接它们之前尝试编译目标文件,而不是用一个命令构建整个程序。试试这个:
gcc -c Multithread_Pthread.c
这将正确创建一个&#34; Multithread_Pthread.o&#34;目标文件,证明&#34; pthread.h&#34;在系统头文件中找到。
接下来是尝试链接的命令:
gcc Multithread_Pthread.o
您将收到相同的消息错误,证明您这是一个链接错误。