Общие модули Python Swig [закрыто]Python

Программы на Python
Anonymous
Общие модули Python Swig [закрыто]

Сообщение Anonymous »

У меня есть сложное приложение C++ (назовем его foo), которое предоставляет API, завернутый для Python через Swig.
Это обеспечивает библиотеку с состоянием, т. е. большие объемы сложных данных хранятся на стороне C++, API в основном состоит из относительно простых вызовов функций, которые манипулируют/опрашивают состояние модели.
Недавно я разработал еще одно приложение C++ (bar), который использует первый (foo) как библиотеку (непосредственно через C++ #include и статическое связывание).
Теперь я также обернул bar с помощью Swig. У него есть собственный файл *.i.
Это приводит к следующему:
foo.py
_foo.so
bar.py
_bar.so

Использование foo или bar из Python, кажется, работает должным образом.
Однако, если я одновременно загружаю foo и bar в Python, они, похоже, взаимодействуют и ведут себя странным образом. Похоже, что на стороне C++ они используют одно и то же состояние. Это неожиданно (для меня). Я бы ожидал, что у них будут полностью независимые области памяти, копии кода и т. д.
Мои ожидания ошибочны? Если да, есть ли опция Swig или Python, позволяющая изменить это поведение? Можно ли обернуть сторону C++ в дополнительное пространство имен из файла *.i?
Изменить:
Я попытаюсь посмотреть, смогу ли я придумать MWE, но все советы до сих пор были полезны.
Я использовал ldd, чтобы убедиться, что два файла *.so статически связаны - весь «наш» код статически связан, все динамические зависимости являются системными библиотеками. то есть:
ldd bar.so
linux-vdso.so.1
libxml2.so.2
libgomp.so.1
libstdc++.so.6
libm.so.6
libgcc_s.so.1
libc.so.6
/lib64/ld-linux-x86-64.so.2
libicuuc.so.70
libz.so.1
liblzma.so.5
libdl.so.2
libpthread.so.0
libicudata.so.70

Вернуться в «Python»