Я взял следующий код из файла практики
#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, можете ли вы сказать мне, что я здесь делаю неправильно?
Заголовки объявляют только функции, это библиотеки, которые их определяют.
Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
Заголовки объявляют только функции, это библиотеки, которые их определяют.
Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
Заголовки объявляют только функции, это библиотеки, которые их определяют.
Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
Заголовки объявляют только функции, это библиотеки, которые их определяют.
Обычно вам нужно добавить библиотеки, которые должны быть явно связаны в командной строке 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.
Простой ... использовать libpthread.so:
$ gcc -o EXAMPLE -lpthread example.c
$ ./EXAMPLE
Parent ID is ---> 9280
Kid ID is ---> 9280
No more kid!
Простой ... использовать libpthread.so:
$ gcc -o EXAMPLE -lpthread example.c
$ ./EXAMPLE
Parent ID is ---> 9280
Kid ID is ---> 9280
No more kid!
Простой ... использовать libpthread.so:
$ gcc -o EXAMPLE -lpthread example.c
$ ./EXAMPLE
Parent ID is ---> 9280
Kid ID is ---> 9280
No more kid!
Простой ... использовать libpthread.so:
$ gcc -o EXAMPLE -lpthread example.c
$ ./EXAMPLE
Parent ID is ---> 9280
Kid ID is ---> 9280
No more kid!