未定义对 pthreads 中运行器的引用

Undefined reference to runner in pthreads

我正在尝试将线程用于 Collat​​z 猜想,该猜想指出如果一个数字是偶数,则将其除以 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”。