问题标签 [libdl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1401 浏览

c++ - dl 库的 C++ 等效窗口

我创建了一个使用 OpenSSL 加密 decript 的应用程序。

要在 g++ 中编译/链接它,需要包含静态库:

这个“dl”库似乎是一个加载 LINUX 需要的动态库的库。

如果使用 *.a 静态库,我不明白为什么需要它们。但是没有这个 ld 库,什么都不起作用。

但是在 Windows 中使用 openssl 和 crypto *.libs g++ linkeditor 也要求 dlopen 函数。

我在 Windows 中使用什么来替代 linux dl 库???

0 投票
1 回答
156 浏览

c - libdl 加载的“插件”如何引用加载它们的程序中的符号?

想象一下,您有一个基于插件架构的应用程序,其中每个插件都是一个*.so动态加载的文件dlopen()

主应用程序可以通过 引用符号dlsym(),因此它可以调用插件的函数。插件如何调用主应用的函数?

我知道主应用程序可以提供一个充满函数指针的结构,插件可以使用它来调用应用程序。还有比这更简单的方法吗?

编辑:这是一个最小的工作示例来说明我的意思:

app.h

app.c

plugin.c

示例用法:

0 投票
1 回答
1442 浏览

libraries - Buildroot:如何添加库

我正在做一个 buildroot 项目来制作一个小的自定义操作系统。我只包括绝对必要的包。我添加的其中一件事是一个预编译程序,它使用系统中不包含的某些库。我希望系统包含它们,但在menuconfigbuildrootlinux-menuconfigbusybox-menuconfig.

所以我的问题是: 如何在 buildroot 中将库添加到我的系统中?

我已经尝试在 menuconfigs 中搜索它们,并且我还尝试在 buildroot 手册中找到有关此的信息。

我要包括的库是:

经过一番搜索,我发现:

  • ld-linux-armhf.so.3实际上是ld-2.*.*.so图书馆的符号链接
  • libc我的系统中包含一个版本( libc.so.2)。
0 投票
0 回答
1122 浏览

asp.net - 如何在 linux contianers 上安装 libdl.so?

我正在将 Visual Studio .net Core 与 Linux Docker Contianers 一起使用。我正在尝试使用 dlopen,它是 libdl.so 库的一部分。我得到:

DllNotFoundException

.

无法加载共享库libdl.so或其依赖项之一

我打算在某处下载 .so 并将其放在执行路径中。不幸的是,我找不到libdl.so.

有什么方法可以包含这个库吗?也许是 Nuget 包 谢谢

0 投票
0 回答
105 浏览

automake - 强制 libtool 与 libdl.so 链接

我正在 Ubuntu 18.04.1 上构建一个共享库,它必须与 libdl.so 显式链接。

使用非 libtool 生成文件时一切都很好 - 将“-ldl”提供给链接器,生成的二进制文件导入 libdl.so。

但是当尝试使用 libtooled automake 构建时,生成的共享库不会导入 libdl.so,尽管 Makefile.am 已将 la_LDFLAGS 设置为“-Wl,--no-as-needed -ldl”

我怀疑这是因为 libtool 带有自己的 dl (libltdl) 实现,并且它是静态链接而不是 libdl.so

有没有什么办法,也许是一个命令行选项,可以强制 libtool 使用本机实现而不是 libltdl?- 我花了很多时间才发现它是徒劳的。

libtool 版本是 2.4.6 谢谢

0 投票
1 回答
514 浏览

c++ - c++ libdl.so:无法在 32 位应用程序中打开共享库

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

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

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

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

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

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


我正在通过cmake v3.10CMakeLists.txt 构建我的项目,我正在使用 32 位的说明:

我已经安装了这个包g++-multilib,我的g++版本是7.3.0.

我正在尝试在 Linux Mint 18.3(6 位)上构建我的程序。

0 投票
1 回答
46 浏览

perl - 如何找到模块名称到不透明指针的 DynaLoader 映射?

根据DynaLoader上的文档

dl_unload_file()动态卸载$libref,它必须是一个不透明的“库引用”,从dl_load_file. 成功返回 1,失败返回 0。此功能是可选的,不一定在所有平台上都提供。

所以dl_load_file返回那些不透明的引用。但是,如果我的文件没有通过显式调用来加载dl_unload_file我该如何找出这些引用呢?

0 投票
0 回答
2427 浏览

c++ - 如何修复:对符号 'dlclose@@GLIBC_2.2.5 - libdl.so 的未定义未定义引用从 CL 中丢失

我一直在移植此代码以与 opencv3 一起使用。 https://github.com/anhttran/extreme_3d_faces

到目前为止,我已经完成了大部分编译,但是当它几乎完成时,我不断收到这个错误。我已经查看了此问题的许多情况,但目前还没有一个解决方案对我有用。任何帮助将不胜感激。

到目前为止,我已经尝试过:

  • 手动创建指向 libdl.so 的符号链接(因为这解决了我之前在编译中遇到的一些类似错误)
  • 添加 -ldl 作为标志,并在 cmakelists
  • 重新排列包含的库的顺序,因为已知会产生影响

结果:

到目前为止,没有任何效果。有什么建议吗?

我的 cmakelists 文件中的代码如下。

0 投票
1 回答
102 浏览

waf - 如何将 libdl 添加到 waf 构建中?

我正在尝试从使用 waf 构建系统编译的程序中调用 dlsym 函数,但无法使用 wscript 链接 libdl。这似乎是一项非常简单的任务,但我已经尝试了一百万种不同的东西,但一无所获。

编辑:如果有一种通用方法可以在每个构建命令的末尾添加标志,那就更好了。我试过设置 CXXFLAGS 和其他环境变量,但它们似乎没有改变任何东西......

0 投票
0 回答
3930 浏览

c++ - 如何在 cmake 中与 libdl 库链接

我的应用程序依赖于 OpenSSL。因此,我下载并构建了 OpenSSL,并将我需要的静态库(libssl.alibcrypto.a)放在我可以控制的已知目录中。在我的应用程序的 cmake 文件中,我使用find_library命令来确定每个库的完整路径,将路径存储在列表变量中,然后将该列表变量添加到target_link_libraries命令中。只要 OpenSSL 符号对我的应用程序可见,那就行得通。

OpenSSL 进一步依赖于“动态链接加载器”库(aka libdl)。我知道 OpenSSL 构建使用了-ldl编译器选项,因为我可以在构建输出中看到它。

在我的 Linux 开发机器上,该libdl库似乎已经安装。证据是:

  1. libdl.solibdl.so.2(它们是实际libdl-2-17.so库文件的符号链接)存在于似乎是此类事物的标准目录中: /usr/lib64
  2. 当我运行时man dlclose,我得到了有关“动态链接加载器”库的预期手册页。

但是,当我构建我的应用程序时,会出现如下链接器错误。libdl绝对找不到图书馆。

问题 1

cmake 应该能够自己找到libdl.so吗?

问题2

在我的应用程序的 cmake 文件中,我可以使用该find_library命令来确定libdl库的完整路径,并将该路径添加到target_link_libraries命令中。请注意,我不必给它一个路径提示。这行得通,但感觉像是一种解决方法。

我是否有必要明确搜索的完整路径libdl.so

问题 3

cmake 中是否有更合适的方法来链接“标准”库,例如libdl

制作文件

以下是我的应用程序的 cmake 文件的相关片段。

制作版本

我使用的是 cmake 版本 2.8.12,但特定版本可能并不重要。