Wrapper na bibliotekę C++, ctypes, inne?

0

Mam kilka bibliotek C++, które chciałbym wołać z Pythona. Obecnie eksperymentuję z ctypes i biblioteki ładnie się ładują. Problem jest z tym, że symbole w bibliotece są zniekształcone (https://en.wikipedia.org/wiki/Name_mangling), więc jest to słabo poręczne, bo zamiast pisać:

my_lib.lib_init(arg1,arg2),

to trzeba
my_lib._Z8lib_initPKcisS0_S0_S0_(arg1,arg2)

Rozwiązanie o jakim myślę, to zrobienie warppera w C na C++, tak by te symbole w bibliotekach *.so były eksportowane w stylu C, a nie C++.

Może ktoś ma inne pomysły?

4
void func()
{}

nm main | grep func result 00000000000011a9 T _Z4funcv

extern "C" void func()
{}

nm main | grep func result 00000000000011a9 T func

Ewentualnie C++ ma coś takiego jak dyrektywy procesora i tam jest demangler

#include <cxxabi.h>
cout<<abi::__cxa_demangle("_Z4funcv", 0, 0, &status));

możesz też zrobić moduł w cpython lub pybind

1

Od miliona lat tym sie NIE zajmowałem *), ale zobacz

https://www.boost.org/doc/libs/1_71_0/libs/python/doc/html/index.html

*) za czasów dinozaurów, tak - fajne to było. Od dawna Pythoin dla mnie nie jest językiem, z którym integracje potrzebuję, utuczył się strasznie - raczej Lua (której z kolei C++ API Luabind jest/było wzorowane na w/w)

1 użytkowników online, w tym zalogowanych: 0, gości: 1