Создаём два текстовых файла main.py и MyClass.cpp
main.py:
from ctypes import cdll
lib = cdll.LoadLibrary('./libmyclass.so')
class MyClass(object):
def __init__(self):
self.obj = lib.MyClass_new()
def my_function(self):
lib.MyClass_myFunction(self.obj)
m = MyClass()
m.my_function()
MyClass.cpp:
#include <iostream>
class MyClass{
public:
void myFunction(){
std::cout << "Hello MyClass!!!" << std::endl;
}
};
int main()
{
MyClass m;
m.myFunction();
return 0;
}
extern "C" {
MyClass* MyClass_new(){
return new MyClass();
}
void MyClass_myFunction(MyClass* m) {
m->myFunction();
}
}
После этого выполняем в консоли следующие команды:
user@computer:~/MyPets/python_cpp_2023-05-01$ ls
main.py MyClass.cpp
user@computer:~/MyPets/python_cpp_2023-05-01$ g++ -c -fPIC MyClass.cpp -o myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ ls
main.py MyClass.cpp myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ g++ -shared -Wl,-soname,libmyclass.so -o libmyclass.so myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ ls
libmyclass.so main.py MyClass.cpp myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ python3 main.py
Hello MyClass!!!
user@computer:~/MyPets/python_cpp_2023-05-01$
Как видим, всё работает. Проще способа не нашёл.