Символы динамической библиотеки не найдены в gcc 7.3.0 - PullRequest
0 голосов
/ 06 декабря 2018

Наше приложение C ++, работающее в Linux и скомпилированное с помощью gcc, загружает динамические библиотеки как «плагины».Код хорошо проработан и отлично работает с gcc 5.3.1.Однако в gcc 7.3.0 загрузка библиотеки не выполняется во время выполнения.Мы получаем ошибки «символ не найден», например:

Failed to load <snip>/solibs/_gnuRelease/libLink.so
dlerror = <snip>: undefined symbol: _ZN24ChannelSelection7INVALIDE ( ChannelSelection::INVALID )
Failed to load <snip>/solibs/_gnuRelease/libBitTrue.so
dlerror = <snip>: undefined symbol: _ZTIN8StarLibs7LinkSim8StarFPGAE ( typeinfo for StarLibs::LinkSim::StarFPGA )

(имя символа с разделенными знаками находится в скобках).

Что-нибудь изменилось в gcc 7.3.0, что может вызвать это?

1 Ответ

0 голосов
/ 06 декабря 2018

Если вы можете перейти непосредственно к C ++ 17, вы можете объявить свои статические константы как constexpr или inline, и компилятор сгенерирует их с помощью внешней связи (определяющей символ).

До этого вы можете явно указать символы в файле .cpp следующим образом:

const int ChannelSelection::INVALID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...