Если бинарник компилировался с новейшей версией, а в дистрибутиве по недосмотру, или какой другой причине, была установлена старая версия. В этом случае программа может вывалиться с сообщением undefined symbol:
kdevelop: symbol lookup error: /usr/lib/kde4/kdevcmakemanager.so: undefined symbol: _ZN16CMakeParserUtils13includeScriptERK7QStringN8KDevelop22ReferencedTopDUContextEP16CMakeProjectDataS2_
На первый взгляд, не совсем понятно, что за символ такой, и к чему он принадлежит.
Но в Linux есть утилиты binutils, среди которых есть программка c++filt, которая, собственно, и может декодировать такие символьные строки.
c++filt _ZN16CMakeParserUtils13includeScriptERK7QStringN8KDevelop22ReferencedTopDUContextEP16CMakeProjectDataS2_
результат выполнения:
CMakeParserUtils::includeScript(QString const&, KDevelop::ReferencedTopDUContext, CMakeProjectData*, QString const&)
Применять для фильтрации "undefined symbol" можно командой
ldd -d -r nameOfBinFile
где nameOfBinFile имя актуального бинарника, который можно использовать как переменную в цикле обработки скрипта.
затем преобразовывать из низкоуровневого представления в более простой для понимания текстовой вид.
Источник http://eduard-x.blogspot.com/2011/10/undefined-symbol.html
Комментариев нет:
Отправить комментарий