Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将dlsym映射到非静态C++;成员函数的方式类似于C函数?_C++_Linux_G++_Dlsym - Fatal编程技术网

C++ 如何将dlsym映射到非静态C++;成员函数的方式类似于C函数?

C++ 如何将dlsym映射到非静态C++;成员函数的方式类似于C函数?,c++,linux,g++,dlsym,C++,Linux,G++,Dlsym,我仔细研究并测试了以下URL, 以及 我的问题是如何将DLSEIM映射到与C函数示例类似的非静态C++成员函数。如果我用C函数语法代替非静态C++成员函数,则得到NO-op.< void *lib; /* void pointer named lib */ void (*sayHello)(void); /* void pointer named sayHello */ lib = dlopen("helloWorld.so", RTLD_NOW);

我仔细研究并测试了以下URL, 以及 我的问题是如何将DLSEIM映射到与C函数示例类似的非静态C++成员函数。如果我用C函数语法代替非静态C++成员函数,则得到NO-op.<
   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");

非常感谢您的帮助。

请考虑使用

readelf -Ws libmy.so


C++没有ABI(应用程序二进制接口)和链接是编译器(甚至编译器版本)依赖。@ Baselev,编译器标签是G++(Ubuntu 4.84-2Ubuntu1~14.04)4.84. @ diter LucCKin,是C++的名字与这个目的有关吗?@ Riffpe,MunLin是绝对相关的。请编辑你的帖子,包括失败的C++尝试,而不是无关的C。我是否需要包含任何头文件来解析损坏的名称,例如:_zn19CDATATransferServer10InitializeEEI13CC_SAMPLETYPEjjj?您需要DataTransferServer的定义才能有一个指向其方法的类型指针。我只包含了DataServer.h,并使用g++-g-DLINUX-I/home/vend/developmentMono/SmartCamXi\u Hybrid/include test.cpp进行编译-ldl并获得以下编译器错误:test.cpp:33:48:错误:“\u zn19cdatatransferserver10initializeeei13cc\u SAMPLETYPEjjj”未在此作用域中声明*(bool**)(&sayHello)=(bool*)dlsym(句柄,\u zn19cdatatransferserver10initializeeei13cc\u sampletypejj);请建议解决这些错误的方法。谢谢。我刚刚被告知,由于使用C函数,所以不能使用DLOPEN和DLSEM访问C++类。相反,此URL中描述了一种更好的方法。感谢您的帮助。您应该提供字符串文字,而不是符号作为dlsym的参数。每一个C++方法都是一个C函数,其中有一个被命名的名字(至少在GCC世界中)。
nm -g libmy.o