C++ libdl.so: невозможно открыть общую библиотеку в 32-битном приложении

Я пишу небольшой проект, в котором я хочу вызвать функцию из общей библиотеки. Для этого я хочу использовать libdl.so"s dlopen() функция.

У меня все настроено так, чтобы оно работало нормально, когда я собираю и запускаю его как 64-битное приложение. Однако, как только я скомпилирую его как 32-битное приложение, а затем попытаюсь запустить, он не сможет загрузить какую-либо библиотеку.

dlopen() просто возвращает ноль и вызов dlerror() показывает

libtbbmalloc.so.2: невозможно открыть общий объектный файл: нет такого файла или каталога

Теперь я предполагаю, что мне нужно каким-то образом установить 32-битную версию этой библиотеки, но я не могу найти ее в диспетчере пакетов, и то, что я нашел в Интернете, тоже не слишком полезно.

Кто-то знает, что проблема и / или как я мог это придумать?


Я строю свой проект через cmake v3.10 и в CMakeLists.txt я использую эту инструкцию для 32-битных:

set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
target_link_libraries(clib /usr/lib32/libdl.so)

Я установил пакет g++-multilib и мой g++ версия 7.3.0,

Я пытаюсь собрать свою программу на Linux Mint 18.3 (6bit).

1 ответ

С помощью @Lorinczy Zsigmond в комментариях я смог найти проблему: мне пришлось установить пакеты libtbb-dev:i836 а также libz-dev:i836 для того, чтобы загрузка функции работала правильно.

Другие вопросы по тегам