Get Types предоставляет вам список объектов Type , определенных в сборке. Этот объект имеет свойство пространства имен. Помните, что сборка может иметь несколько пространств имен.
Для pthread_mutex_init вы хотите скомпилировать / связать с параметром -pthread:
g++ -static -pthread -o"MyProgram" ./main.o -lboost_thread
Проблема в том, что такие функции, как pthread_mutex_init, находятся в отдельной библиотеке. Динамические библиотеки могут включать метаданные, поскольку им нужна отдельная библиотека (поэтому libboost_thread.so включает тот факт, что ему требуется libpthread).
Но статические библиотеки не имеют такой информации. Таким образом, вам нужно предоставить ссылку на все необходимые библиотеки при статической компоновке.
Что касается использования -pthread
вместо -lpthread
, это немного предпочтительнее, потому что он не только связывает необходимую библиотеку, но и предоставляет любые другие параметры, которые следует использовать (например, -D_REENTRANT
компилятору).
В Linux динамическая библиотека может автоматически зависеть от других динамических библиотек, поэтому при компоновке вы получаете другие библиотеки бесплатно. При статической компоновке такой системы нет, и вам нужно указать другие библиотеки вручную.