【发布时间】:2017-02-20 18:47:38
【问题描述】:
在尝试为学校做一个多线程项目时遇到一个重大问题
我只是想运行示例代码来看看 pthread 是如何工作的
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int sum;
void *runner(void *param);
int main(int argc, char *argv[]) {
pthread_t tid;
pthread_attr_t attr;
if (argc !=2){
fprintf(stderr, "usage: a.out <interger value>\n");
return -1;
}
if (atoi(argv[1]) < 0) {
fprintf(stderr, "%d must be >= 0\n",atoi(argv[1]));
return -1;
}
pthread_attr_init(&attr);//get default attributes
pthread_create(&tid,&attr,runner,argv[1]);//create the thread
pthread_join(tid,NULL);//wait for the thread to exit
printf("sum = %d\n",sum);
}
void *runner(void *param) {
int i, upper = atoi(param);
sum = 0;
for (i =1; i <= upper; i++) {
sum += i;
}
pthread_exit(0);
}
无论我做什么,我都无法编译代码。我收到以下错误:
运行“/home/ubuntu/workspace/primefactor/assn3.c” /tmp/cc58AE5c.o:在函数“主”中: assn3.c:(.text+0xc4): 未定义对“pthread_create”的引用 assn3.c:(.text+0xd5): 未定义对“pthread_join”的引用 collect2:错误:ld 返回 1 个退出状态 进程退出,代码:1
我尝试使用 -pthread 标志编写自己的 makefile;没用…… 我试过跑步
sudo apt-get install libpthread-stubs0-dev
安装正确的库;没用...
我竭尽全力尝试让 pthreads_create() 和 pthreads_join() 工作,它们是我学校项目的主要要求。我已经让项目使用普通的 C 程序工作(从命令行获取数字,获取每个 arg 的素数,将它们存储在一个数组中,然后传递该数组并显示结果。例如:./prime. co {1..100} 将从 BASH 运行,其输出为 1:1 2:2 3:3 4:2 2 等... 所以这就是输出应该是的,我应该用线程来做到这一点,但如果我什至不能编译示例代码来查看线程是如何工作的,我就不能这样做。
我确实已经花了几个小时搜索、尝试,但是没有运气摆脱 pthread_create() 和 pthread_join() 的这些未定义的引用错误。任何帮助都将不胜感激,以找出我收到上述错误的原因。
编辑:
感谢那些尝试为我回答的人。我不知道为什么我投了反对票;我在这里不是很活跃,在寻求帮助时我会尽量保持礼貌。不管怎样,我终于想通了。
如果我使用 make 文件,它必须如下所示:
assn3:
gcc -g -Wall -pthread assn3.c -o assn3
然后从命令行:make assn3
【问题讨论】:
-
编译和链接时可能需要使用
-pthread选项。 -
我试过的东西:makefile all: gcc -Wall -O3 -pedantic-errors -D_REENTRANT -lpthread assn3.c -o assn3 all: gcc -g -Wall -pthread assn3.c assn3
标签: c multithreading pthreads