Попытка статически связать Boost

Get Types предоставляет вам список объектов Type , определенных в сборке. Этот объект имеет свойство пространства имен. Помните, что сборка может иметь несколько пространств имен.

14
задан Alex F 25 October 2010 в 15:22
поделиться

3 ответа

Для pthread_mutex_init вы хотите скомпилировать / связать с параметром -pthread:

g++ -static -pthread -o"MyProgram"  ./main.o   -lboost_thread

Проблема в том, что такие функции, как pthread_mutex_init, находятся в отдельной библиотеке. Динамические библиотеки могут включать метаданные, поскольку им нужна отдельная библиотека (поэтому libboost_thread.so включает тот факт, что ему требуется libpthread).

Но статические библиотеки не имеют такой информации. Таким образом, вам нужно предоставить ссылку на все необходимые библиотеки при статической компоновке.

Что касается использования -pthread вместо -lpthread , это немного предпочтительнее, потому что он не только связывает необходимую библиотеку, но и предоставляет любые другие параметры, которые следует использовать (например, -D_REENTRANT компилятору).

24
ответ дан 1 December 2019 в 09:32
поделиться

В Linux динамическая библиотека может автоматически зависеть от других динамических библиотек, поэтому при компоновке вы получаете другие библиотеки бесплатно. При статической компоновке такой системы нет, и вам нужно указать другие библиотеки вручную.

2
ответ дан 1 December 2019 в 09:32
поделиться

Попробуйте добавить к своему вызову -lpthread .

2
ответ дан 1 December 2019 в 09:32
поделиться
Другие вопросы по тегам:

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