【发布时间】:2016-01-04 18:11:14
【问题描述】:
我仔细研究和测试了以下 URL,Calling function in shared library (Linux) get Segmentation Fault 以及https://git.xeserv.us/Quora/dlsym-example/src/master/testprog.c。 我的问题是如何将 dlsym 映射到类似于此 C 函数示例的非静态 C++ 成员函数。如果我用 C 函数语法替换非静态 C++ 成员函数,我会得到一个空操作。
void *lib; /* void pointer named lib */
void (*sayHello)(void); /* void pointer named sayHello */
lib = dlopen("helloWorld.so", RTLD_NOW);
*(void **) (&sayHello) = dlsym(lib,"_ZN19CDataTransferServer10InitializeEi13CC_SAMPLETYPEjjj");
感谢任何帮助。
【问题讨论】:
-
C++ 没有 ABI(应用程序二进制接口)并且链接依赖于编译器(甚至是编译器版本)。
-
@Basilev,编译器标签为 g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4。
-
@Dieter Lücking,C++ 名称修改是否与此目的相关?
-
@richpe,重整是绝对相关的。请编辑您的帖子以包含您失败的 C++ 尝试,而不是无关的 C 尝试。