Я могу построить свое приложение на основе общей библиотеки, но я получаю неразрешенные ошибки символов при связывании его со статической версией той же библиотеки:
Я могу построить свое приложение следующим образом:
g++ -lutils application.cpp -o application.exe
Приведенные выше ссылки на команды в общей версии библиотеки utils.
Я пытаюсь связать статическую версию библиотеки следующим образом:
g++ -l:utils.a application.cpp -o application.exe
Обараз я использую
export LD_LIBRARY_PATH=path/to/utils:$LD_LIBRARY_PATH
, чтобы сообщить g ++, где находится utils.a.
Неразрешенный символ, сообщаемый ld, присутствует в выходных данных nm:
nm --defined-only path/to/utils.a
и помечен буквой «Т» (это означает, что это из раздела кода).
Я пытаюсь выяснить, в чем может быть причина проблемы.
Правильно ли использовать LD_LIBRARY_PATH, чтобы указать, где искать utils.a?
Какая точная команда для проверки того, что статическая библиотека определяет (разрешает) символ?Достаточно ли команды
nm --defined-only path/to/utils.a
или я должен использовать какие-либо дополнительные параметры, например
nm --defined-only --demangle path/to/utils.a
например?