Я бы сказал, что ответ будет зависеть от ОС.Но для всех UNICES, с которыми я работал (включая Linux и Mac OS X), это будет безопасно.Конечно, вам нужно компилировать компиляторы, использующие тот же ABI, но ABI g ++ не изменился за последние годы (точно не помню, но я думаю, что 3.2 было последним большим изменением).Кроме того, в модели, используемой в Linux, связь не влияет на поведение кода.Таким образом, вы можете смело помещать любой код в динамически связанный файл (т. Е. Файл общего объекта), он будет работать так, как если бы он был связан статически.
В Windows, если вы используете VC ++, вы не сможетескомпилировать вашу библиотеку с другим компилятором.Программа и библиотека должны использовать одну и ту же версию VC ++, совместимость в обоих направлениях отсутствует.Если вы используете g ++, вы можете скомпилировать с другой версией g ++ (как в UNIX), но не с VC ++.Что касается вопроса об этом, то это опасно, я позволю специалисту по Windows ответить, поскольку DLL имеет странное поведение, и если я помню, объект всегда должен быть уничтожен в рамках DLL, которая его загрузила, но я не на 100%точно.