Вот и проблема: используемый мной код использует большую библиотеку, которая связывает с boost. Когда я компилирую статическую ссылку, все работает нормально. Однако, когда я пытаюсь выполнить динамическое связывание, я получаю кучу неопределенных опорных ошибок. Первая мысль была, очевидно, «я не связываю библиотеку boost program_options», но я посмотрел, и она есть в команде связывания (и она приходит после библиотеки, которая в ней нуждается). Среди различных ошибок, хотя, это выделялось:Ошибка компоновки Boost: отсутствуют символы 'B5cxx11'
undefined reference to `_ZN5boost15program_options3argB5cxx11E
В моей повседневной жизни, связывая ошибки, как правило, в форме «неопределенная ссылка на SomeFunction (...)». Поэтому я пошел в папку установки моей библиотеки boost и использовал readelf
, чтобы увидеть, какие символы у меня есть в библиотеке libboost_program.so
. И на самом деле этот символ не появляется. Вместо этого ближайший я нашел _ZN5boost15program_options3argE
.
Google-немного, я узнал, что дополнительная часть B5cxx11
- это новое дополнение к названию, называемому C++ 11. Похоже, что boost (по крайней мере, версия 1.59.0) еще не поддерживает это новое название.
Так что мой вопрос: это известная проблема? Какое обходное решение существует? И почему эта проблема не появляется со статической связью?
Редактировать: Если кто-то споткнется на этот вопрос в будущем, я просто попытался повысить 1.60.0, а символы содержат строку B5cxx11
. Я верю (читайте: надеюсь), это решит проблему. Однако, как двойная проверка, я собираюсь снова перекомпилировать boost 1.59.0, чтобы узнать, связано ли это с тем, что я изменил в своей среде (хотя я сомневаюсь).
Вы когда-нибудь узнавали, в чем проблема? – pzelasko