首页 > 解决方案 > c++ libdl.so:无法在 32 位应用程序中打开共享库

问题描述

我正在写一个小项目,我想从共享库中调用一个函数。为此,我想使用libdl.so'dlopen()功能。

我已经设置好所有东西,以便当我将它作为 64 位应用程序构建和运行时它可以正常工作。但是,一旦我将它编译为 32 位应用程序然后尝试运行它,它将无法加载任何库。

dlopen()只需返回 null 并调用dlerror()显示

libtbbmalloc.so.2:无法打开共享对象文件:没有这样的文件或目录

现在我猜我必须以某种方式安装该库的 32 位版本,但我无法在包管理器中找到它,而且我在网上找到的内容也没有太大帮助。

有人知道问题出在哪里和/或我怎么能找到它?


我正在通过cmake v3.10CMakeLists.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(6 位)上构建我的程序。

标签: c++linux32bit-64bitlibdl

解决方案


在评论中@Lorinczy Zsigmond 的帮助下,我找到了问题所在:我必须安装软件包libtbb-dev:i836libz-dev:i836才能使功能加载正常工作。


推荐阅读