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
для того, чтобы загрузка функции работала правильно.