主.cpp 测试3.cpp 如果 main.cpp 使用 gcc-11 构建,而 test3.cpp 使用 gcc-4.8,程序将崩溃。 如果 main.cpp 在链接列表中使用 test3.so 构建,程序将正常运行。 在我的要求中,我想动态加载一个插件(可能是用其他版本的 gcc 构建的)和 t ...
主.cpp 测试3.cpp 如果 main.cpp 使用 gcc-11 构建,而 test3.cpp 使用 gcc-4.8,程序将崩溃。 如果 main.cpp 在链接列表中使用 test3.so 构建,程序将正常运行。 在我的要求中,我想动态加载一个插件(可能是用其他版本的 gcc 构建的)和 t ...
只是为了学习的目的,我做了一个主程序的小例子,它通过dlopen暂时加载一个共享库(然后通过dlsym从它加载一个符号),如果前者不可用,则使用默认的。 在我的机器上,为了使非默认库可用于主程序,我需要通过g++ -fPIC -shared MyLib.cpp -o libMyLib.so编译前者 ...
语境我正在使用 dlmopen 加载我无法修改的共享库的多个实例(专有)。 我这样做是因为这个库不是线程兼容的,所以我需要为每个线程加载它的独立版本。 void *handle = dlmopen(LM_ID_NEWLM, "/myLib.so", RTLD_LAZY); 为了得到我需要的 fun ...
我的项目的目标如下: 从我的主可执行文件中,我想加载一个库( libfoo.so )来加载第二个库( libbar.so )。 我不想在传递给dlopen的任何filename arguments 中指定相对或绝对路径:即我希望我的代码读取“ dlopen("libfoo.so", RTLD_LA ...
下面是共享库的示例代码: 这是主要的: 和 makefile: 它按我的预期工作: 但是,当我使用 dlopen 加载它时,出现了问题。 现在,主要是: Makefile 是: 运行的结果是: dlopen 似乎调用了 function so_init,但 function so_init 找不 ...
背景 我们有一个用于与设备通信的 c++ 库。 1 个库只能与 1 个设备通信。 该库在启动时还会创建一个日志文件。 我们现在有一个需要同时与 30 台设备通信的新项目。 问题 这个新项目在c++20中,将在linux上运行,我们希望能够将 30 个这些库加载到程序中,所以我制作了这个 .so ...
我正在使用 g++/KDevelop/CMake(3.16.3) 进行构建。 在我将cmake_minimum_required( VERSION 3.0.0 )放在我的 CMakeLists.txt 的第一行并且一切正常之前,现在我需要将它更改为cmake_minimum_required( V ...
我在 macOS High Sierra 10.13.6 中编译了 BlockSci。 这创建了/usr/local/lib/libblocksci.dylib 。 我使用pip3安装了blocksci Python 分析库,这创建了/Users/${USER}/dev/BlockSci/block ...
在 POSIX(或 GNU)系统上,什么会导致dlclose()函数失败? 我知道它在重复关闭时失败; 并且它在空指针参数上行为不端(在我的系统上出现分段违规)。 但在其他情况下它会失败吗? 编辑:我尝试查看源代码并且有点难过 - 无法真正弄清楚在哪里看( dlclose.c显然不是这个地方)。 ...
我从 android 4.4 /system/lib/libgui.so 上的共享库动态获取 function#include <jni.h> #include <string> #include <android/log.h> #include <sys ...
在 C++ 项目中,我正在使用dlopen和dlsym加载.so 。 .so是从 C 源代码编译而来的,所有函数都有 C 链接。 我唯一无法弄清楚的部分是如何将结果指针转换为extern "C" function,以便实际调用站点使用适当的链接。 我知道其中一个主要区别是名称修改,我不必担心这一点 ...
我最近为我的 Apple Silicon Mac 构建了 ROS2 galactic,我想为这个 ROS 使用rosbridge_suite 。 所以我在src文件夹下添加了rosbridge_suite repo 并再次构建。 当我使用下面的命令启动 rosbridge 时 我遇到了这些错误 和 ...
如果文件anexe是static编译的,没有符号,没有出口,ELF, dlopen("anexe", RTLD_LAZY)可以用来将map变成memory吗? 我的目标不是能够引用符号——没有符号。 相反,我的目标是能够在给定地址(固定地址,而不是 PIC)的情况下调用其函数,并在给定地址的情况下 ...
我正在尝试为应用程序编写一个简单的插件系统,并希望防止插件踩到其他符号,但是当涉及到 static class 成员时,RTLD_DEEPBIND 和 RTLD_LOCAL 似乎还不够在不同的插件中命名。 我写了一个精简的例子来说明我的意思。 我像这样编译并运行它: 第二个插件的 output 文件 ...
我处于以下情况:我正在编写一个 C++ 程序,该程序必须动态加载 C++ 库(即通过dlopen和LoadLibrary中的朋友和 Windows.LoadLibrary 中的朋友) 这可以通过创建 C 接口来完成。 现在,在程序和库中,我管理了一些 object ,其中有一些指定的模板成员和一些方 ...
许多像这样的讨论和这样的例子已经警告我们尝试dlopen一个 PIE 永远不会是正确的。 原因多种多样:复制重定位、TLS 等。 但是,如果我们放开限制,这些问题是可以避免的。 这个问题表明我们使用fPIC编译可以消除复制重定位,并且 TLS 似乎工作正常。 这就提出了一个问题,即我们离正确动态加 ...
我在 Linux 上工作。 当我的应用程序链接到共享库(不隐藏符号)时,该库中的所有符号都是可见的。 共享库也可以在运行时使用dlopen加载。 是否可以使用dlopen模式参数来控制符号的可见性,或者我总是必须使用dlsym来获取所需的符号? ...
我正在尝试使用来自libcrypto.so.3的 function EVP_PKEY_new_raw_private_key 。 当我与-l:libcrypot.so.3链接时,它可以工作。 当我尝试使用dlmopen + dlsym打开同一个文件时,它会在调用 function 时成为SEGV 。 ...
在我的代码中,我有一个 for 循环,首先我调用 dlopen 加载共享对象,然后调用加载库的函数,然后调用 dlclose 卸载它。 循环的第一次迭代按预期工作,但在第二次迭代期间(当 i=1 时)dlopen 调用导致分段错误(核心转储)。 生成 mylib.so 的脚本: 在这里,go ...
我正在实现一个支持实时软件升级(无需进程重启)的 Linux 应用程序。 为了支持这个功能,我把我的应用程序分成了两部分 模块代理 - 与外部进程交互的应用程序的前端 模块实现 - 动态共享模块,可以在程序更新期间使用新实现卸载和重新加载。 高级方法是将应用程序置于静止状态,将传入消息保存 ...