Ошибка: /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

8 ответов

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

Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
3
ответ дан 22 May 2018 в 23:50

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

Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
3
ответ дан 18 July 2018 в 15:17

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

Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
3
ответ дан 24 July 2018 в 20:36

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

Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
3
ответ дан 31 July 2018 в 23:37

Простой ... использовать libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c

$ ./EXAMPLE
Parent ID is ---> 9280          
Kid ID is ---> 9280             
No more kid!
2
ответ дан 22 May 2018 в 23:50

Простой ... использовать libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c $ ./EXAMPLE Parent ID is ---> 9280 Kid ID is ---> 9280 No more kid!
2
ответ дан 18 July 2018 в 15:17

Простой ... использовать libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c $ ./EXAMPLE Parent ID is ---> 9280 Kid ID is ---> 9280 No more kid!
2
ответ дан 24 July 2018 в 20:36

Простой ... использовать libpthread.so:

$ gcc -o EXAMPLE -lpthread example.c $ ./EXAMPLE Parent ID is ---> 9280 Kid ID is ---> 9280 No more kid!
2
ответ дан 31 July 2018 в 23:37

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

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