При компиляции многопоточных программ в Linux (и, возможно, в некоторых других ОС) gcc должен быть передан -pthread
, что позволяет ему автоматически связываться с библиотекой потоков и выполнять любые другие важные действия, необходимые для использования потоков в этой конкретной системе.
Я не уверен, но я думаю, glibc имеет фиктивные функции потоков, которые ничего не делают (у него, безусловно, есть определения для функций, таких как pthread_cond_wait()
, по крайней мере), поэтомукод без -pthread
компилируется без ошибки компоновщика.
При использовании вашего кода с системой конфигурации / сборки вместо компиляции вручную, cmake имеет FindThreads для установки необходимых флагов компилятора ибиблиотеки в зависимости от ОС и компилятора.При использовании autoconf макроархив autoconf включает макрос ax_pthread , который делает то же самое.Другие системы, вероятно, имеют свои собственные пути;это только те, с кем я знаком.