dlopen相关内容

在Linux中强制动态链接器在运行时加载库

有一点历史,我有3个库: 没有依赖项的"lib1.so" 与"lib1.so"链接的"lib2.so" 没有依赖项的“测试"可执行程序 我需要的是在运行时通过"dlopen"方法从“测试"可执行文件动态加载"lib2.so".问题在于"lib1.so"由于链接器不知道在哪里找到而无法自动加载. 我首先尝试像这样加载"lib1.so": void* ptr_lib1 = ..
发布时间:2020-04-30 08:33:41 服务器开发

重复符号后如何可靠地使用dlsym?

晚上好,我目前正在基于 Plux.net 模型. 为简单起见,我基本上声明了一个带有extern C的符号(将其命名为pluginInformation)(以取消损坏),并且我的插件管理器在预配置的导入文件(.so)中查找该符号. 问题是主应用程序声明了相同的符号,不仅如此,而且它具有的任何依赖项也可能具有该符号. (由于使用了该pluginInformation,模块可以发布插头和/ ..
发布时间:2020-04-23 11:18:32 服务器开发

dlopen从静态库linux C ++的动态库

我有一个与静态库(.a)链接的linux应用程序,该库使用dlopen函数加载动态库(.so) 如果我将静态库编译为动态库并将其链接到应用程序,则dlopen可以按预期工作,但是如果如上所述使用它,则不会. 静态库不能使用dlopen函数加载共享库吗? 谢谢. 解决方案 您尝试执行的操作应该没有问题: app.c: #include "staticlib.h" ..
发布时间:2020-04-23 11:06:51 服务器开发

在运行时加载Linux库

我认为Linux的一个主要设计缺陷是共享对象地狱,它涉及以二进制形式而不是源代码形式分发程序. 这是我的特定问题:我想以ELF二进制格式发布一个Linux程序,该程序应在尽可能多的发行版上运行,以使我的强制性依存关系尽可能的低:在任何情况下,唯一需要的库是libpthread, libX11,librt和libm(当然还有glibc).当我使用gcc构建程序时,我正在动态链接这些库. ..
发布时间:2020-04-23 10:58:10 服务器开发

Linux上的RTLD_LOCAL和dynamic_cast

我们有一个由应用程序中的几个共享库构成的插件,我们需要在应用程序运行时对其进行更新.出于性能原因,我们在卸载旧插件之前先加载并开始使用新插件,只有在使用旧插件完成所有线程的情况下,我们才卸载它.由于新插件和旧插件的库中具有相同的符号,因此我们将dlopen()和RTLD_LOCAL相同.如果我们不希望新的插件从内部函数偶然调用到旧插件的符号. 插件的一个库对由插件的另一个库创建的对象执行dy ..
发布时间:2020-04-23 10:56:42 服务器开发

在iOS中使用dlsym按名称调用函数

我不能在iOS中按名称调用函数吗?我有一个名为 getstring 的C函数。我将其称为如下: void * handle = dlopen(NULL,RTLD_NOW); if(handle) { fp func = dlsym(handle,“getstring”); if(!func) responseField.text = [NSString stringWithU ..
发布时间:2018-09-20 21:31:32 移动开发

函数'dlopen()'是私有API吗?

我想使用函数'dlopen()'在iOS平台上调用动态库,是'dlopen()'私有API函数吗? 解决方案 多年来我在iOS上使用dlopen取得了成功。在我的用例中,我使用dlopen按需加载公共系统框架,而不是在应用程序启动时加载它们。效果很好! [编辑] - 从iOS 8开始,扩展和共享框架禁止使用 dlopen ,但是应用程序本身仍然可以使用 dlopen (现在记录为不仅 ..
发布时间:2018-09-03 17:48:15 移动开发

当我们应该使用RTLD_DEEPBIND?

我尝试了链接中提到的问题: https:// sourceware .org / ml / libc-alpha / 2009-06 / msg00168.html 我在代码中做了一些修改,如下所述: >> Cat libdep.c #include int duplicate ='u'; int get_duplicate(){ printf ..
发布时间:2018-04-21 10:59:16 C/C++开发

何时gcc __attribute __((构造函数))运行?

我的程序“程序”依赖于libA.so,所以当我运行它时,libA.so被打开并且它的构造函数被执行。现在,我也有一个模块libC.so,它也依赖于libA。我运行加载libC的 dlopen(“libC.so”),,并根据我的实验执行libA的构造函数。 依赖关系如下所示: libA具有构造函数 libB还有一个构造函数 libC依赖于libA和libB 程序依赖于libA 程 ..
发布时间:2018-04-21 10:45:54 其他开发

无论调用多少次,dlclose都不会真正卸载共享对象

我的程序使用 dlopen 来加载共享对象,然后使用 dlclose 来卸载它。有时候这个共享对象再次被加载。我注意到静态变量没有被重新初始化(对我的程序至关重要),所以我添加了一个测试( dlopen , RTLD_NOLOAD dlclose 之后,查看库是否真的被卸载。果然,它仍然在内存中。然后我试着重复调用 dlclose 直到库真的被卸载,但我得到的是一个无限循环。这是我用来检查库是否被 ..
发布时间:2018-04-20 17:39:14 服务器开发

dlclose上不调用共享库中全局静态变量的析构函数

在一个主程序中,我使用了dlopen和dlclose(分别是LoadLibrary和FreeLibrary)共享库。共享库包含一个静态变量,该变量在dlopen上实例化,并在dlclose时销毁。此行为在MSVC 2008和2013,GCC 3.4.6和Sunstudio 12.1上一致。 然而,GCC 4.9.1和GCC 5.2.1不再在dlclose上调用析构函数。 静态变量的类的特殊 ..
发布时间:2018-04-20 17:31:40 C/C++开发

无法使用静态TLS加载更多对象

我有一个应用程序使用 dlopen()来加载其他模块。应用程序和模块基于Ubuntu 12.04 x86_64,使用gcc 4.6而不是i386 arch。然后,将二进制文件复制到具有完全相同操作系统的另一台计算机上,并且工作正常。然而,如果将它们复制到Ubuntu 12.04 i386,则一些(但不是全部)模块无法加载以下消息: dlopen:无法使用静态TLS加载任何更多对象 ..
发布时间:2018-04-20 16:38:22 服务器开发

typeinfo,共享库和dlopen(),而不使用RTLD_GLOBAL

我正在遇到一些异常无法正常工作(或至少,我希望;我知道这是有问题)跨共享库加载时使用> dlopen 。我在这里包括一些简化的示例代码。实际情况是myapp = Matlab, myext1 = mexglx matlab扩展, mylib 是两个扩展之间的代码共享库( > myext1 , myext2 ) mylib.h struct Foo {Foo(int a);嘛; } ..
发布时间:2017-09-29 11:42:57 C/C++开发

dlopen vs链接开销

假设我有一个库 - foo.so。当构建我的二进制(需要这个库)时,我可以(1)链接foo.so,或者(2)在程序源代码中,dlopen这个库,然后调用这个库提供的函数 当我从图书馆调用函数时,(1)和(2)之间是否有性能差异?请注意,我知道会有不同的初始化特征(如dlopen的成本,首次使用符号等的开销),但是在稳定状态下,两者的选择是否同样快或是一个更快? 谢谢。 解决方案 ..
发布时间:2017-07-22 12:09:12 服务器开发

返回共享库符号表

例如: void * sdl_library = dlopen(“libSDL.so”,RTLD_LAZY); void * initializer = dlsym(sdl_library,“SDL_Init”); 假设没有错误,初始化程序将指向共享库libSDK.so中的SD_Init函数。 p> 但是,这需要知道符号“SDL_Init”存在。 ..
发布时间:2017-06-07 22:18:22 .NET组件控件

当通过OSX上的dlopen打开库时调试崩溃

我已经开发了一个使用dlopen加载用户开发的库的C ++应用程序的问题。在过去几年里,这个应用程序已经被各种各样的linux发行版和OSX版本所使用,所以我假设我使用dlopen是可以的,所以代码依赖于它(是的,这是傲慢的,所以我会在失败的时候回报)。现在的问题是用户已经开发了一个不在我的系统上加载的库(OSX 10.6.4)。当系统尝试加载它时,会有一个冻结然后崩溃。崩溃的线程在崩溃报告中看起 ..
发布时间:2017-04-18 04:29:13 C/C++开发

C ++:使用dlopen()加载共享库时未定义的符号

我尝试使用dlopen()将共享库加载到另一个共享库时遇到问题。我检查了所有的教程,如何正确使用dlopen()。所以这里是简化的代码: 主共享库包含一个具有纯虚函数的类,子共享库(aka插件)必须实现该类。此外,它具有一些其他功能,它们以默认行为实现。 主共享库 p> plugin.h: { public: virtual int func1()= 0; vir ..
发布时间:2016-10-30 00:24:53 C/C++开发