问题标签 [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.
c++ - dl 库的 C++ 等效窗口
我创建了一个使用 OpenSSL 加密 decript 的应用程序。
要在 g++ 中编译/链接它,需要包含静态库:
这个“dl”库似乎是一个加载 LINUX 需要的动态库的库。
如果使用 *.a 静态库,我不明白为什么需要它们。但是没有这个 ld 库,什么都不起作用。
但是在 Windows 中使用 openssl 和 crypto *.libs g++ linkeditor 也要求 dlopen 函数。
我在 Windows 中使用什么来替代 linux dl 库???
c - libdl 加载的“插件”如何引用加载它们的程序中的符号?
想象一下,您有一个基于插件架构的应用程序,其中每个插件都是一个*.so
动态加载的文件dlopen()
。
主应用程序可以通过 引用符号dlsym()
,因此它可以调用插件的函数。插件如何调用主应用的函数?
我知道主应用程序可以提供一个充满函数指针的结构,插件可以使用它来调用应用程序。还有比这更简单的方法吗?
编辑:这是一个最小的工作示例来说明我的意思:
app.h
:
app.c
:
plugin.c
:
示例用法:
libraries - Buildroot:如何添加库
我正在做一个 buildroot 项目来制作一个小的自定义操作系统。我只包括绝对必要的包。我添加的其中一件事是一个预编译程序,它使用系统中不包含的某些库。我希望系统包含它们,但在menuconfig
buildrootlinux-menuconfig
或busybox-menuconfig
.
所以我的问题是: 如何在 buildroot 中将库添加到我的系统中?
我已经尝试在 menuconfigs 中搜索它们,并且我还尝试在 buildroot 手册中找到有关此的信息。
我要包括的库是:
经过一番搜索,我发现:
ld-linux-armhf.so.3
实际上是ld-2.*.*.so
图书馆的符号链接libc
我的系统中包含一个版本(libc.so.2
)。
asp.net - 如何在 linux contianers 上安装 libdl.so?
我正在将 Visual Studio .net Core 与 Linux Docker Contianers 一起使用。我正在尝试使用 dlopen,它是 libdl.so 库的一部分。我得到:
DllNotFoundException
.
无法加载共享库libdl.so
或其依赖项之一
我打算在某处下载 .so 并将其放在执行路径中。不幸的是,我找不到libdl.so
.
有什么方法可以包含这个库吗?也许是 Nuget 包 谢谢
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 谢谢
c++ - c++ libdl.so:无法在 32 位应用程序中打开共享库
我正在写一个小项目,我想从共享库中调用一个函数。为此,我想使用libdl.so
'dlopen()
功能。
我已经设置好所有东西,以便当我将它作为 64 位应用程序构建和运行时它可以正常工作。但是,一旦我将它编译为 32 位应用程序然后尝试运行它,它将无法加载任何库。
dlopen()
只需返回 null 并调用dlerror()
显示
libtbbmalloc.so.2:无法打开共享对象文件:没有这样的文件或目录
现在我猜我必须以某种方式安装该库的 32 位版本,但我无法在包管理器中找到它,而且我在网上找到的内容也没有太大帮助。
有人知道问题出在哪里和/或我怎么能找到它?
我正在通过cmake v3.10
CMakeLists.txt 构建我的项目,我正在使用 32 位的说明:
我已经安装了这个包g++-multilib
,我的g++
版本是7.3.0
.
我正在尝试在 Linux Mint 18.3(6 位)上构建我的程序。
perl - 如何找到模块名称到不透明指针的 DynaLoader 映射?
dl_unload_file()
动态卸载$libref
,它必须是一个不透明的“库引用”,从dl_load_file
. 成功返回 1,失败返回 0。此功能是可选的,不一定在所有平台上都提供。
所以dl_load_file
返回那些不透明的引用。但是,如果我的文件没有通过显式调用来加载dl_unload_file
我该如何找出这些引用呢?
c++ - 如何修复:对符号 'dlclose@@GLIBC_2.2.5 - libdl.so 的未定义未定义引用从 CL 中丢失
我一直在移植此代码以与 opencv3 一起使用。 https://github.com/anhttran/extreme_3d_faces
到目前为止,我已经完成了大部分编译,但是当它几乎完成时,我不断收到这个错误。我已经查看了此问题的许多情况,但目前还没有一个解决方案对我有用。任何帮助将不胜感激。
到目前为止,我已经尝试过:
- 手动创建指向 libdl.so 的符号链接(因为这解决了我之前在编译中遇到的一些类似错误)
- 添加 -ldl 作为标志,并在 cmakelists
- 重新排列包含的库的顺序,因为已知会产生影响
结果:
到目前为止,没有任何效果。有什么建议吗?
我的 cmakelists 文件中的代码如下。
waf - 如何将 libdl 添加到 waf 构建中?
我正在尝试从使用 waf 构建系统编译的程序中调用 dlsym 函数,但无法使用 wscript 链接 libdl。这似乎是一项非常简单的任务,但我已经尝试了一百万种不同的东西,但一无所获。
编辑:如果有一种通用方法可以在每个构建命令的末尾添加标志,那就更好了。我试过设置 CXXFLAGS 和其他环境变量,但它们似乎没有改变任何东西......
c++ - 如何在 cmake 中与 libdl 库链接
我的应用程序依赖于 OpenSSL。因此,我下载并构建了 OpenSSL,并将我需要的静态库(libssl.a
和libcrypto.a
)放在我可以控制的已知目录中。在我的应用程序的 cmake 文件中,我使用find_library
命令来确定每个库的完整路径,将路径存储在列表变量中,然后将该列表变量添加到target_link_libraries
命令中。只要 OpenSSL 符号对我的应用程序可见,那就行得通。
OpenSSL 进一步依赖于“动态链接加载器”库(aka libdl
)。我知道 OpenSSL 构建使用了-ldl
编译器选项,因为我可以在构建输出中看到它。
在我的 Linux 开发机器上,该libdl
库似乎已经安装。证据是:
libdl.so
和libdl.so.2
(它们是实际libdl-2-17.so
库文件的符号链接)存在于似乎是此类事物的标准目录中:/usr/lib64
- 当我运行时
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,但特定版本可能并不重要。