Я действительно получил эту проблему:
У меня есть A.EXE, связанный с B.LIB.У меня C.DLL также связан с B.LIB.
Как вы можете видеть, эти две программы связаны с B.LIB
Теперь, когда требуется, A.exe переходит на загрузку C.DLL.После загрузки A.EXE и C.DLL разделили B.LIB для кода и данных
Проблема в том, что можно связать "fantom" B.LIB с C.DLL для использования уже загруженногов A.exe?
думаю нет.Это ограничение из окна.В линуксе можно, если я правильно помню.Это было рассмотрено опцией -fPic GCC.Но не уверен.
Решением для обмена глобальными / статическими данными, хранящимися в B.LIB, с A.EXE и C.DLL является использование общего класса / интерфейсов.Интерфейс A.EXE для отправки в C.DLL с указателем данных / интерфейса на B.LIB, хранящийся в A.EXE.
Другими словами, если вашему C.DLL необходимо установить / совместно использовать состояниестатическая переменная в B.LIB, ваш A.EXE должен инициализировать C.DLL с интерфейсом, чтобы разрешить обмен данными с B.LIB в A.EXE.
В любом случае, B.LIB, хранящийся в C.DLL, продолжает раздувать глобальную программу из-за дублирования кода из B.LIB в A.EXE и C.DLL
.глобальное вздутие живота, вы должны разделить свою A.LIB на большее количество D.DLL, E.DLL, которые загружаются A.EXE и переданы через интерфейс в ваш C.DLL
. Чтобы уменьшить раздутый код до нуля,Вы должны использовать полностью независимый метод интерфейса.