未定义对 pthreads 中运行器的引用
Undefined reference to runner in pthreads
我正在尝试将线程用于 Collatz 猜想,该猜想指出如果一个数字是偶数,则将其除以 2,但如果该数字是奇数,则该数字将乘以 3,然后再乘以 1。最终,该数字将等于零。我正在使用 Linux 和 VI 和 C。我的问题是我在主函数错误中不断得到对 runner 的未定义引用。我的代码:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int num;
void *runner(void *);
struct pt{
long num[100];
int size;
}shared;
int main(int argc, char **argv) {
pthread_t tid;
pthread_attr_t attr;
struct pt *shared_info = &shared;
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 -2;
}
shared_info -> size = atoi(argv[1]);
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, (void *)shared_info);
pthread_join (tid,NULL);
int i;
for(i = 0; i < (*shared_info).size - 1; i++)
printf("%ld,",(*shared_info).num[i]);
printf("%d\n", (*shared_info).num[(*shared_info).size - 1]);
return 0;
void *runner(void *param) {
struct pt * shared_info = (struct pt*) param;
int x = shared_info -> size;
int i = 0;
while((shared_info -> num[i-1]) != 1) {
if(x % 2 ==0) {
x /= 2;
}
else {
x = x * 3 + 1;
}
}
shared_info -> size = i;
pthread_exit(0);
}
}
你放错了一个“}”,你必须把最后的一个移到"return 0;"
之后
而且你的循环将是无限的,因为你一直循环到“1”,而它应该循环到“0”。
我正在尝试将线程用于 Collatz 猜想,该猜想指出如果一个数字是偶数,则将其除以 2,但如果该数字是奇数,则该数字将乘以 3,然后再乘以 1。最终,该数字将等于零。我正在使用 Linux 和 VI 和 C。我的问题是我在主函数错误中不断得到对 runner 的未定义引用。我的代码:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int num;
void *runner(void *);
struct pt{
long num[100];
int size;
}shared;
int main(int argc, char **argv) {
pthread_t tid;
pthread_attr_t attr;
struct pt *shared_info = &shared;
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 -2;
}
shared_info -> size = atoi(argv[1]);
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, (void *)shared_info);
pthread_join (tid,NULL);
int i;
for(i = 0; i < (*shared_info).size - 1; i++)
printf("%ld,",(*shared_info).num[i]);
printf("%d\n", (*shared_info).num[(*shared_info).size - 1]);
return 0;
void *runner(void *param) {
struct pt * shared_info = (struct pt*) param;
int x = shared_info -> size;
int i = 0;
while((shared_info -> num[i-1]) != 1) {
if(x % 2 ==0) {
x /= 2;
}
else {
x = x * 3 + 1;
}
}
shared_info -> size = i;
pthread_exit(0);
}
}
你放错了一个“}”,你必须把最后的一个移到"return 0;"
之后而且你的循环将是无限的,因为你一直循环到“1”,而它应该循环到“0”。