Я пытаюсь загрузить разделяемую библиотеку (плагин), которую мне предоставили (с закрытым исходным кодом) dlopen под платформу Linux ARM.Я пытаюсь загрузить таким образом:
void* handle = dlopen(<library_path>/<library_name>, RTLD_NOW);
В результате возникает ошибка с этим сообщением:
Failed to load <library_path>/<library_name>: undefined symbol: <symbol_name>.
Я попытался заглянуть внутрь библиотеки с помощью nm, но, похоже,lib была удалена, символ не найден.Я также попытался использовать readelf -s, и, фактически, я получил такой результат:
12663: 00000000 0 NOTYPE GLOBAL DEFAULT UND <symbol_name>
Читая, я получаю, что readelf -s возвращает все символы, включая символы, определенные в библиотеках, на которые ссылаетсяit.
Ответы на этот вопрос мне не совсем понятны: это символ, который должен быть в библиотеке, а его нет, потому что он был скомпилирован неправильноили это символ, который я должен найти где-то еще?Вывод readelf -d, кажется, предполагает, что я предоставляю все необходимые разделяемые библиотеки.Может ли эта ошибка быть связана с ошибкой в процессе компиляции моего исполняемого файла или это не связано с загрузчиком?
Кроме того, я прочитал о значении каждого столбца, но эти значения довольно странные,Как вы интерпретируете это описание символа?Почему адрес 0?Почему тип NOTYPE?