Ошибка: /tmp/ccOB6cIT.o: В функции `main ': example.c :(. Text + 0x4a) [closed]

Я взял следующий код из практического файла

#include <stdio.h>
#include <pthread.h>
void *kidfunc(void *p) 
{
printf ("Kid ID is ---> %d\n", getpid( ));
}
int main(int count, char* argv[])
{
pthread_t kid ;
pthread_create (&kid, NULL, kidfunc, NULL) ;
printf ("Parent ID is ---> %d\n", getpid( )) ;
pthread_join (kid, NULL) ;
printf ("No more kid!\n") ;
return 0;
}

Но когда я компилирую его на своем ноутбуке (с Ubuntu 14.04), он генерирует следующую ошибку:

ahsan-15f8116@VirtualWorld:~$ gcc example.c
/tmp/ccOB6cIT.o: In function `main':
example.c:(.text+0x4a): undefined reference to `pthread_create'
example.c:(.text+0x71): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status

Для меня это не имеет никакого смысла, потому что заголовок включает pthread.h , вы можете сказать мне, что я здесь делаю не так?

1
задан 9 April 2017 в 16:10

2 ответа

Заголовки, которые только объявляют функции, это библиотеки , что определяют их.

Обычно необходимо было бы добавить библиотеки, которые будут связаны явно на gcc командная строка, например, gcc -o prog prog.c -lm для математической библиотеки libm. Однако pthread библиотека является особым случаем - она связана специальным флагом компилятора -pthread:

gcc -pthread example.c

От man gcc

-pthread
    Adds support for multithreading with the pthreads library.  This
    option sets flags for both the preprocessor and linker.
2
ответ дан 7 December 2019 в 12:34

Простой... используют libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c

$ ./EXAMPLE
Parent ID is ---> 9280          
Kid ID is ---> 9280             
No more kid!
1
ответ дан 7 December 2019 в 12:34

Другие вопросы по тегам:

Похожие вопросы: