LLVM и визуальная студия .obj бинарная несовместимость - PullRequest
5 голосов
/ 13 июня 2011

Кто-нибудь знает, планируется ли двоичная совместимость LLVM для скомпилированных Visual Studio .obj и статических .lib файлов? Прямо сейчас я могу связать только файлы .obj, сделанные в LLVM, с динамическими библиотеками, которые загружают DLL во время выполнения (скомпилировано из Visual Studio).

Хотя вероятность того, что двоичная совместимость будет между двумя компиляторами, вероятно, очень мала, кто-нибудь знает, почему так трудно добиться этого между компиляторами для одной платформы?

Ответы [ 2 ]

8 голосов
/ 14 июня 2011

Как уже сказал Нейл, совместимость включает в себя такие вещи, как соглашение о вызовах, искажение имен и т. Д. Хотя эти два являются наименьшими возможными проблемами. LLVM уже знает обо всех соглашениях о вызовах для Windows (stdcall, fastcall, thiscall), поэтому вы можете вызывать вещи из .dll.

Если мы говорим о коде C ++, то основной проблемой является ABI C ++: компоновка vtable, реализация rtti и т. Д. Clang следует Itanium C ++ ABI (который, например, использует gcc), VCPP - нет, и все эти без документов, к сожалению. В этом направлении в Clang проделана определенная работа, поэтому все может начать работать. Обратите внимание, что, скорее всего, некоторые части никогда не будут покрыты, например, Обработка исключений на основе seh в win32, потому что она запатентована.

Связывание с чистым кодом C работало целую вечность, так что вы можете обойти эти проблемы, связанные с C ++ ABI, через заглушки / оболочки C.

1 голос
/ 13 июня 2011

Помимо всего прочего, такого как соглашения о вызовах, использование регистров и т. Д., Для совместимости двоичного кода на языке C ++ два компилятора должны использовать одну и ту же схему преобразования имен. Эти схемы являются собственностью (поэтому MS не раскрывает подробности своей схемы) и в любом случае находятся в состоянии постоянного изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...