Linux 2.6.19, gcc 3.4.6.
// main.c
#include "stdio.h"
#include <pthread.h>
int main()
{
printf("Thread id using pthread: %li\n", pthread_self());
getchar();
return 0;
}
% gcc main.c -lpthread -o main
% ./main
все ок, печатает id потока
а теперь без -lpthread
% gcc main.c -o main
% ./main
Выдает 0.
Вопрос: почему gcc вообще такое линкует? И почему печатает 0?
Здравствуйте, Quintanar, Вы писали:
Q>Здравствуйте, Посторонним В., Вы писали:
ПВ>>Вопрос: почему gcc вообще такое линкует? И почему печатает 0?
Q>Потому что в libc есть заглушки. Нужны, чтобы подгружать библиотеки с pthreads в приложения, где pthreads не нужны.
Хм.. но на другие функции вроде pthread_create линкер ругается.
Здравствуйте, Посторонним В., Вы писали:
ПВ>Хм.. но на другие функции вроде pthread_create линкер ругается.
pthread_create имеет важную функциональность. Т.е. без реальной функции линковать нет смысла. Наверно, поэтому его не включили в заглушки.