Я не могу говорить о поведении Linux и OS X, но в Windows именно так и происходит.Поскольку вы говорите, что также хотите компилировать в Windows, это актуально.
Проблема, с которой вы сталкиваетесь, заключается в том, что у вас есть несколько версий всего в ядре .Каждый модуль и само приложение имеют свою собственную копию ядра, и их переменные не совместно используются.Это включает в себя среду выполнения C, поэтому такие вещи, как new / delete через границы модуля чреваты опасностью.
Чтобы убедиться, что это именно то, что происходит, создайте простой тест: задайте для глобального значения в ядре значение вваше тестовое приложение, затем из из вашего динамически загруженного кода попробуйте получить доступ к этому глобальному и посмотреть, что вы получите.Держу пари, что вы увидите, что ваш магазин в глобальном масштабе не будет отражен!
Решения:
1) Сделать ядро общей динамической библиотекой.Это может или не может быть вариант для вас.
2) Работать очень осторожно со знанием вышеизложенного;Все CRT и / или ваше собственное состояние ядра не будут совместно использоваться, поэтому вы должны убедиться, что вещи будут размещены / уничтожены на своей стороне границ модуля, среди прочего.
Мое собственное приложение разработано почтиидентично твоему;то есть статическая библиотека с общим кодом, который необходим как приложению, так и модулями, а затем динамически загружаемые плагины, загружаемые ядром приложения.
Что я делаю для всех состояний общего ядра, к которым необходимо обращаться через модули, так это то, чтоПервое, что делает каждый модуль после загрузки, - это «указатель ядра», настроенный на создание экземпляров библиотек ядра в приложении.Это гарантирует, что все модули работают с одинаковыми данными.