Вы должны сделать больше, чем просто сохранить имена функций одинаковыми. То, что вы должны гарантировать, называется совместимостью прикладного двоичного интерфейса, или ABI.
Есть много вещей, которые влекут за собой только имена символов. Например, у вас есть такие вещи, как сохранение структур данных, которые передаются через границу DLL, одинакового размера, и компилятор должен размещать все члены класса, определенные в вашем модуле, но доступ к которым осуществляется вне его, в том же относительном месте. Многое зависит от ABI компилятора. Компиляторы Microsoft имеют плохую привычку не быть ABI-совместимыми между версиями, в то время как некоторые другие компиляторы работают немного сложнее, чтобы быть совместимыми. Но помните, что это требует больше, чем просто использование одного и того же компилятора.
Вероятно, вам нужно будет прочитать о том, как поддерживать совместимость с ABI в вашей среде, поскольку, вероятно, в нем содержится больше деталей, чем можно было бы перечислить здесь, и существует множество способов ошибиться. Вот одна короткая статья . Могут быть и лучшие, особенно для компиляторов MSVC.