У меня есть код C++ 14, который должен загружать произвольный файл общих объектов с помощью dlopen
. К сожалению, в некоторых системах (например, мой archlinux, как сообщается, также относится к некоторым .so на ubuntu и gentoo), эти so-файлы могут быть «GNU ld scripts» вместо реальных двоичных файлов.Загрузка скрипта GNU ld с dlopen
Для справки, здесь содержание моего /usr/lib/libm.so
:
/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP (/usr/lib/libm.so.6 AS_NEEDED (/usr/lib/libmvec.so.1))
Я нашел пару кодовых частей, которые имеют дело с этим вопросом в ghc или ruby. Я хотел бы избежать использования ручного анализа текстового файла на основе анализа текста и файла dlerror
. Я чувствую, что это ужасно зло, и я не смогу реализовать и поддерживать угловые случаи этого формата.
Есть ли чистый способ реализовать этот случай? Честно говоря, я озадачен тем, почему dlopen
на самом деле не справляется с этими переменами.
Примечание. Учитывая вышеупомянутые исправления, я думаю, что это не просто проблема с моей конфигурацией/версией системы. Если это должно работать готово с dlopen
(ошибка вместо отсутствующей функции), пожалуйста, дайте мне знать.
Является ли ваш ld.so достаточно недавним? – marcolz
Не относится к определенному языку, но о загрузке/привязке. – Olaf
@Olaf Я ищу решение, которое я могу использовать в своей программе на C++. Поскольку я загружаю библиотеку во время выполнения с использованием кода C++/C, я считаю это связанным. – Zulan