Связывание области загруженных символов при использовании swig для переноса C ++ для python - PullRequest
2 голосов
/ 25 августа 2011

У меня есть библиотека C ++, которую я обертываю SWIG, чтобы сделать ее доступной в python.Насколько я понимаю (из опыта), когда SWIG оборачивает библиотеку C ++ в python, после загрузки она помещает символы библиотеки C ++ в «локальную» область видимости.То есть - область, которая не позволяет будущим динамически связанным библиотекам находить символы.

(я получаю это определение "local" от man dlopen (3) )

Есть ли способ заставить SWIG поместить эти символы в "глобальную" область видимости, чтобы их могли найти любые будущие динамически связанные библиотеки?

1 Ответ

2 голосов
/ 27 августа 2011

Вы можете создать общие объекты Python dlopen с флагом RTLD_GLOBAL, вызвав setdlopenflags в sys, например:

sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL)

до загрузки вашего модуля,(Об этом обсуждают пользователи *1011*)

...