无法在C中编译多线程示例

时间:2016-10-12 04:35:13

标签: c multithreading pthreads

在尝试为学校做多线程项目时存在重大问题

我只是尝试运行示例代码来了解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

1 个答案:

答案 0 :(得分:1)

您似乎没有向链接器指定有关线程库的信息。对于多线程应用程序,norifyDataSetChanged的常用选项如下(假设您的程序文件名为thread1.c):

gcc

还建议使用gcc -D_REENTRANT -lpthread thread1.c -o thread1 pedantic 关于编译器警告等。所以这应该做:

-Wall -O3 -pedantic-errors