问题标签 [dlopen]
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++ - Sun CC 未链接或编译共享对象中的 fstream 模板
我对 Sun CC(主要是 6.2,但似乎也发生在 12.1)有一个问题,我似乎无法编译或链接到共享对象中的 fstream 模板。
我已将其从我正在工作的遗留系统中提取出来,并在此示例中复制了它。
C/C++ 共享对象(main.c):
还有一个 C 主程序 (main2.c):
编译库
编译C主程序
在 SunOS 5.8 上运行此程序会产生以下错误:
nm 证实了这一点:
我正在使用的编译器版本:
我应该试图说服 Sun CC 将 fstream 编译到我的库中吗?或者有没有我可以链接的图书馆?我无法更改为使用 stlport4 (http://developers.sun.com/solaris/articles/cmp_stlport_libCstd.html),因为它在 Sun CC 6.2(或 5.3...版本编号有什么用?)上不可用。
在 Linux 中编译并链接 libstdc++ 时,这似乎工作正常。我猜fstream被编译成libstdc++?(纳米似乎证实了这一点)。
c - dlopen 问题(OSX)
我有一个主应用程序,它dylib
从内部动态加载一个 ,dylib
我想从我的主程序中调用导出的函数。我dlopen(NULL,flag)
用来检索我的主要应用程序 handle
并dlsym(handle, symbol)
获取function
.
dlopen
给了,no error
但是当我尝试dlsym
我的时候,function
我得到了以下信息error
:
该符号已导出,经nm确认已更正,
我不确定为什么RTLD_NEXT
会出现这种情况?这是结果dlopen(NULL,flag)
吗?
我怎样才能解决这个问题或实现我的目标?
还是有其他方法可以调用主应用程序(最好不是通过将函数指针传递给 dylib)?
提前致谢!
添加:
出口:
nm的结果
dylib中的代码:
c - dlopen() 搜索路径
有没有办法以编程方式找出 dlopen() 在哪些路径中搜索共享对象?我一直认为 dlopen() 只会查看 /lib 和 /usr/lib 但现在我已经看到在 Linux Mint 上,像 libglib-2.0.so 这样的几个核心组件位于完全不同的文件夹中,即 /rofs/lib/ i386-gnu-linux 和其他一些。有没有办法了解 dlopen() 将搜索共享对象的所有这些路径?我已经检查了环境变量 LD_LIBRARY_PATH 但它根本没有定义。
ruby-on-rails - 如何加载 dlopen 以启动 rails
我正在尝试从我的根目录(我正在使用 RVM)运行 rails,我收到以下消息:
有人知道如何安装缺少的依赖项吗?尝试使用
但这没有帮助。
c++ - C++ 从 void* 转换为 SomeClass*
我正在开发一个 C++ 库,该库将作为插件在 C++ 和 C 程序中动态加载(dlopen、dlsym ...)。
C++ 程序将使用库中的创建者和析构函数来分别调用构造函数和析构函数。像这样的东西:
问题是:它不是那种类型安全的。可以在这里输入安全吗?( static_cast
, dynamic_cast
, reinterpret_cast
...)
这很重要,因为我打算为每个 MyClass 方法创建一个 C 包装器。这将允许我将此库加载到 C 程序中(类似于可以与 C 风格或 C++ 风格一起使用的 DBus C 移植)。所以我会做这样的事情:
请记住,这只是一个虚拟示例。
非常感谢。
c - dlsym -- 获取被覆盖的符号
我有一个动态加载库的应用程序,它动态加载库...
在 Windows 中,我可以遍历所有加载的模块以查找我感兴趣的符号。不知道如何在 Unix/Linux 环境中执行此操作。我知道我可以对前两个符号使用dlsym(dlopen(0, flag))
ordlsym(RTLD_DEFAULT / RTLD_NEXT)
并且知道要搜索的模块的顺序——我怎样才能更深入并获得给定符号的所有定义?
c++ - 尝试使用 dlopen 加载库时未定义的符号
我正在尝试加载我在 Linux ARM 平台下使用 dlopen 提供(封闭源代码)的共享库(插件)。我正在尝试以这种方式加载:
结果是此消息失败:
我试图用 nm 查看库内部,但似乎 lib 已被剥离,找不到符号。我也尝试使用 readelf -s,事实上,我得到了这个结果:
通过阅读,我知道 readelf -s 返回所有符号,包括在它引用的库中定义的那些符号。
这个问题的答案对我来说并不完全清楚:这是一个应该在库中的符号,而它不存在是因为它以错误的方式编译还是我应该在其他地方找到的符号?readelf -d 的输出似乎表明我提供了所有需要的共享库。此错误可能与我编译可执行文件的方式错误有关,还是与加载程序无关?
另外,我阅读了每列的含义,但这些值很奇怪。您如何解释该符号描述?为什么地址是0?为什么是 NOTYPE 类型?
c - Linux:是否可以使用静态链接的二进制文件进行一些面向插件的编程?
假设我们有一个非常小的嵌入式系统,仅包含 linux 内核和一个作为 init 运行的静态链接二进制文件。我们希望二进制文件能够在运行时动态加载外部插件。
在linux上可以吗?Dlopen 仅适用于共享库和动态链接,因为静态二进制文件不会将任何符号导出到外部世界,那么还有其他方法吗?
c++ - Linux 上跨共享库的多个单例实例
正如标题所提到的,我的问题很明显,我详细描述了这个场景。在singleton.h文件中有一个由单例模式实现的名为singleton的类,如下所示:
然后,有一个名为 hello.cpp 的插件,如下所示:
您可以看到插件调用了单例并更改了单例中的属性 num。
最后,有一个使用单例和插件的主要功能如下:
并且makefile如下:
那么,输出是什么?我以为有以下几点:
但是,实际输出如下:
它证明了单例类有两个实例。
为什么?
c++ - C++ 可运行类
我想实现类似于 Java 的接口 Runnable 的东西。我尝试这样做:
想法很简单。我想重载 run 方法,然后 start() 应该启动重载的方法。但是……这行不通。
PS我从带有dlopen的动态库中加载了一个派生自Runnable的类实例。