2016-06-20 4 views
1

У меня есть приложение Qt, которое использует библиотеку буферов буфера. Я хочу сделать его автономным. Однако после того, как я управлял библиотеками для статической привязки, приложение по-прежнему зависит от библиотек boost. библиотеки, которые я Включенная:Boost Logger Статическое связывание: не работает

..../boost_1_61_0_b1/stage/lib/libboost_regex.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_log_setup.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_thread.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_log.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_system.a 
    ..../boost_1_61_0_b1/stage/lib/libboost_filesystem.a 

В компилирует приложение (после бесчисленных попыток). Однако, когда я использую инструмент ldd, он показывает библиотеки boost в списке зависимостей.

Примечание: Я должен определить BOOST_ALL_DYN_LINK. В противном случае он не связывается.

Есть ли способ не использовать этот макрос и преодолеть проблему зависимости? Если нет, то какие решения вы предлагаете обойти эту проблему?

+1

Скомпилируйте все библиотеки boost как статические библиотеки на 1-м месте. Я уверен, что есть опция bjam, которую вы можете использовать, чтобы достичь этого. –

+0

Но у меня есть файлы .a и .so в/stage/libs. Должен ли я отделить их? –

ответ

0

По умолчанию на современных UNIX-подобных системах gcc-ссылки с общими библиотеками по умолчанию. Чтобы принудительно установить статическое связывание, вы можете добавить -static в свою командную строку связывания (см. docs) или убедиться, что gcc не находит разделяемые библиотеки, но только находит статические библиотеки (например, переместите разделяемые библиотеки в отдельный каталог, пока вы ссылку на ваш проект). Обратите внимание: -static сделает все библиотеки связанными статически, включая libstdC++.

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

gcc ... -lboost_log ...

можно было бы написать

gcc ... ..../boost_1_61_0_b1/stage/lib/libboost_log.a ...

В любом случае, вы должны не определить BOOST_ALL_DYN_LINK, потому что этот макрос означает именно напротив - вы намерены установить ссылку с Boost общие библиотек.

+0

Я попробовал bjam -static, тогда я связался с библиотеками .a, и он сработал. Я не знаю, является ли это проблемой Qt.pro или что-то, но кажется, что когда в одном и том же пути были библиотеки .a и .so, они ссылаются на .so, даже если это указано иначе. В любом случае спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^