C++ 如何从C+调用so文件中的类及其函数+;Linux程序

C++ 如何从C+调用so文件中的类及其函数+;Linux程序,c++,linux,dynamic-linking,shared-objects,dynamic-library,C++,Linux,Dynamic Linking,Shared Objects,Dynamic Library,可能重复: 我正在编写一个共享对象,比如libtest.so,它有一个类和一个函数。我还有另一个程序“program.cpp”,我想从中调用libtest.so文件中的类及其函数。我不知道如何进行。请帮忙 谢谢 当做 Mahesh动态地,您需要调用dlsym来获取 函数,然后通过指针调用它。其语法是 有点棘手,因为dlsym返回一个void*,并且没有转换 在void*和函数指针之间。(有些编译器确实允许, 虽然在形式上,在C++11之前的版本中,它需要一个诊断,就像C++一样 标准。)Pos

可能重复:

我正在编写一个共享对象,比如libtest.so,它有一个类和一个函数。我还有另一个程序“program.cpp”,我想从中调用libtest.so文件中的类及其函数。我不知道如何进行。请帮忙

谢谢 当做
Mahesh

动态地,您需要调用
dlsym
来获取 函数,然后通过指针调用它。其语法是 有点棘手,因为
dlsym
返回一个
void*
,并且没有转换 在
void*
和函数指针之间。(有些编译器确实允许, 虽然在形式上,在C++11之前的版本中,它需要一个诊断,就像C++一样 标准。)Posix标准中推荐的溶液为:

int (*fptr)( int );
*(void**)(&fptr) = dlsym( handle, "function_name" );
这假设指向函数的指针具有相同的大小和格式 作为指针,而不是由C或C++标准保证的数据,但是
由Posix保证

动态(使用
dlopen
),还是静态?在后一种情况下,只需将
-ltest
添加到您的
ld
。我正在使用dlopen动态尝试。嗨,詹姆斯,感谢您的回复。仅从调用函数。因此文件正在工作。我想使用.so文件中的类对象调用一个函数。如果它是成员函数,只需使用
dlsym
获取对象的地址(从
void*
直接转换即可),并对其调用函数:
MyType*p=(MyType*)dlsym(…);p->function()