Повторюсь: я ищу совместимость ABI между библиотеками той же версии Visual-C ++!
Мы хотим смешивать и сопоставлять некоторые внутренние библиотеки DLL C ++ от разных команд, созданные в разное время из разных файлов проекта. Из-за длительного времени сборки мы точно хотим избежать больших монолитных сборок, когда каждая команда повторно компилирует исходный код библиотеки другой команды.
При использовании библиотек DLL C ++ с интерфейсами C ++ это скорее < / a> очистить что вы можете сделать это, только если все библиотеки DLL скомпилированы с помощью одного и того же компилятора / Visual Studio. версия.
Для меня не совсем очевидно, что что должно быть таким же, чтобы обеспечить совместимость с ABI.
- Очевидно, что отладку (
_DEBUG
) и выпуск (NDEBUG
) нельзя смешивать, но это также очевидно из того факта, что они связаны с разными версиями общей среды выполнения. - Нужна ли вам точно такая же версия компилятора или достаточно, чтобы результирующая DLL ссылалась на одну и ту же разделяемую среду выполнения C ++, то есть в основном на одну и ту же распространяемый? (Я думаю, что статика не летает при передаче полных объектов C ++)
- Is there a documented list of compiler (and linker) options that need to be the same for two C++ DLLs of the same vc++ version to be compatible?
- For example, is the same
/O
switch necessary - does the optimization level affect ABI compatibility´? (I'm pretty sure not.) - Или обе версии должны использовать один и тот же _ 4_ переключатель?
- Или _ 5_ ...?
- For example, is the same
По сути, я хотел бы создать набор (мета) данных для связи с Visual-C ++ DLL, который описывает совместимость с ABI.
Если есть различия, то сейчас я сосредоточен только на VS2015.
_ITERATOR_DEBUG_LEVEL
- это тоже вещь, которая должна быть равна, поскольку она влияет на компоновку объекта std-lib. - person Martin Ba   schedule 21.10.2016