Khi tôi cố gắng biên dịch chương trình này, nó thất bại:Tại sao tôi nhận được lỗi "tham chiếu không xác định" ngay cả khi tôi bao gồm các tệp tiêu đề phù hợp?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void *WriteNumbers(void *threadArg)
{
int start, stop;
start = atoi((char *)threadArg);
stop = start + 10;
while (start < stop)
{
printf("%d\n", start++);
sleep(1);
}
return 0;
}
int main(int argc, char **argv)
{
pthread_t thread1, thread2;
// create the threads and start the printing
pthread_create(&thread1, NULL, WriteNumbers, (void *)argv[1]);
pthread_create(&thread2, NULL, WriteNumbers, (void *)argv[2]);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
Nó đã cho tôi những lỗi sau:
tmp/ccrW21s7.o: In function `main':
pthread.c:(.text+0x83): undefined reference to `pthread_create'
pthread.c:(.text+0xaa): undefined reference to `pthread_create'
pthread.c:(.text+0xbd): undefined reference to `pthread_join'
pthread.c:(.text+0xd0): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
Tại sao nó lại cho tôi những lỗi tài liệu tham khảo không xác định mặc dù tôi đã bao gồm pthread.h
, khai báo các chức năng này?
Bạn cũng gặp các vấn đề khác: bạn không kiểm tra giá trị 'argc' nhưng bạn đang sử dụng giá trị của' argv'. Phương thức 'WriteNumbers' của bạn không trả về một giá trị. – dreamlax
@dreamlax: Tôi đã khắc phục sự cố 'không trả lại'; Tôi đã không nhận thấy vấn đề argc/argv. –