我只是尝试运行示例代码来了解pthreads的工作方式
#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);
}
无论我做什么,我都无法获得编译代码。我收到以下错误:
Running&#34; /home/ubuntu/workspace/primefactor/assn3.c" /tmp/cc58AE5c.o:在功能&#39; main&#39;: assn3.c :(。text + 0xc4):未定义引用&#39; pthread_create&#39; assn3.c :(。text + 0xd5):未定义引用&#39; pthread_join&#39; 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
答案 0 :(得分:1)
您似乎没有向链接器指定有关线程库的信息。对于多线程应用程序,norifyDataSetChanged
的常用选项如下(假设您的程序文件名为thread1.c):
gcc
还建议使用gcc -D_REENTRANT -lpthread thread1.c -o thread1
pedantic 关于编译器警告等。所以这应该做:
-Wall -O3 -pedantic-errors