Я почти полностью написал пакет Python на C++. Причина этого в том, что я хочу вручную обернуть существующую библиотеку C++, но здесь это не имеет значения.
Этот пакет Python состоит из нескольких различных модулей расширения, каждый из которых я скомпилировал с помощью distutils в скрипте setup.py. Эти модули расширения могут быть взаимосвязаны, и в этом случае я связываю их, передавая разделяемую библиотеку конструктору расширения. Для ясности предположим, что у меня есть два модуля Python C++, A и B, где B использует функции, определенные в A. Обычно они компилируются в A.so и B.so. Поскольку B использует функции, определенные в A, я компилирую модуль A как обычно, а затем передаю ':A.so' как библиотеку ключевому слову library в конструкторе расширений для модуля B. (':' позволяет g++ учитывать тот факт, что библиотека не начинается с обычного префикса 'lib'.) Это прекрасно работает для связывания функций и классов.
Моя проблема заключается в следующем: я определил некоторые глобальные переменные С++ в A. Выполнение того, что я описал, позволяет B получить доступ к функциям в A, на самом деле кажется, что создается КОПИЯ любых глобальных данных, определенных в A. Это реальная проблема для меня.
Мне кажется, что проблема по существу похожа на наличие глобальных переменных в общих библиотеках, как обсуждалось здесь и в других местах. Это решение и другие, которые я нашел в Интернете, похоже, не решают проблему.
Любая помощь будет очень признательна!
Изменить: забыл упомянуть, что да, мои глобальные переменные объявлены как extern.
Is mmap truly necessary?
, я не знаю, это вариант (Python не моя сильная сторона), также с Debian или Red Hat и их производными вы можете использовать /dev/shm - person David Ranieri   schedule 09.06.2013