gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:05:10 25 4
gpt4 key购买 nike

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

我只是想运行示例代码来看看 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 "/home/ubuntu/workspace/primefactor/assn3.c" /tmp/cc58AE5c.o: In function 'main': assn3.c:(.text+0xc4): undefined reference to 'pthread_create' assn3.c:(.text+0xd5): undefined reference to 'pthread_join' collect2: error: ld returned 1 exit status Process exited with code: 1

我尝试使用 -pthread 标志编写自己的 makefile;没用....我尝试过运行

sudo apt-get install libpthread-stubs0-dev

安装正确的库;没用...

我束手无策,试图让 pthreads_create() 和 pthreads_join() 工作,它们是我学校项目的主要要求。我已经让该项目使用普通的 C 程序(从命令行获取数字,获取每个参数的质因数,将它们存储在数组中,然后传递该数组并显示结果。例如:./prime. c.o {1..100} 将从 BASH 运行,结果为 1:1 2: 2 3: 3 4: 2 2 等等...这就是输出应该是什么,我应该通过线程来做到这一点,但如果我什至无法编译示例代码来查看线程如何工作,我就无法做到这一点。

我确实已经花了几个小时搜索、尝试,但没有成功摆脱 pthread_create() 和 pthread_join() 的这些 undefined reference 错误。如果能帮助我弄清楚为什么会出现上述错误,我们将不胜感激。

编辑:

感谢那些尝试为我回答的人。我不知道为什么我投了反对票;我在这里不太活跃,在寻求帮助时我会尽量保持礼貌。不管怎样,我终于明白了。

如果我使用 make 文件,它必须如下所示:

assn3:
gcc -g -Wall -pthread assn3.c -o assn3

然后从命令行:make assn3

最佳答案

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

gcc -D_REENTRANT  -lpthread  thread1.c   -o thread1

还建议使用 -Wall -O3 -pedantic-errors 来对编译器警告等进行迂腐。所以应该这样做:

gcc -Wall -O3 -pedantic-errors -D_REENTRANT  -lpthread  thread1.c   -o thread1

关于无法编译 C 中的多线程示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com