dlopen

    0热度

    1回答

    我为非python C++应用程序编写了一个C++“python插件”。 在某些时候,这个插件是.so,它初始化python解释器并打开一个python控制台。 为了方便 “的ReadLine” 模块,然后导入,我们得到这个错误: 导入错误:/usr/lib/python2.7/lib-dynload/readline.so:未定义的符号:PyOS_InputHook 链接命令(由cmake生成)

    1热度

    1回答

    我想了解在我工作的有问题的情况下,Linux上的动态链接器/加载器行为。 我们的代码崩溃被加载为插件(dlopen(libwrapper.so,RTLD_GLOBAL))。 libwrapper.so只是一个很薄的层,可以加载其他插件来完成真正的工作。这些插件可以被命名为:P1和P2,这些插件都依赖于称为F的通用库(所有这些都非常简化)。 引入了包装器(libwrapper.so),允许在没有RT

    4热度

    1回答

    我认为Linux中的一个主要设计缺陷是共享对象地狱,当涉及到分发程序而不是源代码形式。 这里是我的具体问题:我想发布一个ELF二进制形式的Linux程序,它应该尽可能多地运行在发布版本上,所以我的强制性依赖性如此低:在任何情况下所需的唯一库是libpthread ,libX11,librt和libm(当然还有glibc)。当我使用gcc构建我的程序时,我正在动态链接这些库。 但是,我的程序还应该支

    3热度

    1回答

    我想打开一个共享对象作为数据文件并对其执行验证检查。验证是签名检查,我签署共享对象。如果验证成功,我想将当前打开的共享对象作为适当的共享对象加载。 第一个问题:是否可以在签名检查期间调用dlopen并加载共享对象作为数据文件,以便代码不是执行?根据手册页,我不这么认为,因为我没有看到类似于RTLD_DATA的旗帜。 由于我将共享对象作为数据文件打开,因此我有描述符可用。验证成功后,我想将描述符传递

    4热度

    2回答

    我移植从Windows到Linux(OS X实际上)的DLL。 我用这个StackOverflow article来做这个改变。 即我已经移植Windows的 “布尔的DllMain()” 到Linux的方法: __attribute__((constructor)) void dllLoad(); __attribute__((destructor)) void dllUnload();

    1热度

    1回答

    考虑使用g ++构建一个动态加载的库下面的代码之前调用 - 在Linux上,-fPIC 4.7与-rdynamic选项链接: struct Wrapper { libraryUnregisterCbMap_t instance; Wrapper() : instance() { HDebugLog("Wrapper CTOR!");} ~Wrapper() { HD

    2热度

    1回答

    这是我的第一篇文章,我试图遵守论坛规则。 我知道这个问题已被问过很多次,但提供的解决方案不适合我。我不太清楚为什么会这样,可能我忽略了一些东西。 我想从驻留在主应用程序内的共享模块(.so)符号(变量和函数)访问。 我总是收到链接错误(“未定义的参考”)。这里所描述的,与我使用普通的C而不是C++的一个厚望 的情况是类似的: shared object can't find symbols in

    1热度

    2回答

    在我的应用程序中,我使用这种方式获取电池信息(通过IOKit)。 static void print_raw_battery_state(io_registry_entry_t b_reg) { CFBooleanRef boo; CFNumberRef n; int tmp; int cur_cap = -1; int max_cap = -1;

    2热度

    2回答

    之间有什么区别:在dlfcn.h中 使用dlopen加载一个共享库()可用的,包括在构建中的可执行文件Android.mk共享库。 代码例如: Android.mk文件: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ test.c LOCAL_SHARED_LIBRARIES := \

    1热度

    1回答

    我试图从共享库的dlopen()失败调用中报告所有未解析的符号。我已经尝试了RTLD_LAZY和RTLD_NOW作为dlopen调用的标志。我知道共享库有10个缺失的符号(即,如果你执行了一个静态链接g ++ blah blah:链接将失败,并丢失10个符号)。我想让dlerror()告诉我在加载失败期间所有10个丢失的符号。 有没有人知道如何哄这种情况发生?我从man页面看到,dlerror()