2011-06-13 18 views
5

¿Alguien sabe si la compatibilidad binaria de LLVM está planificada para Visual Studio combiled .obj y static .lib? Ahora solo puedo vincular archivos .obj de LLVM con bibliotecas dinámicas que cargan una DLL en tiempo de ejecución (compilada desde Visual Studio).LLVM y visual studio .obj incompatibilidad binaria

Si bien hay muy pocas posibilidades de que la compatibilidad binaria ocurra entre los dos compiladores, ¿alguien sabe por qué es tan difícil lograr esto entre los compiladores de una plataforma?

+0

El grado en que clang .o y otras libs se vinculan en el mejor de los casos en mi práctica es tanto éxito como ld obtiene. Específico para mi configuración, estoy usando -m i386pep con ld. A menos que lvm's lld supere la compatibilidad ABI en el futuro, la mejor suposición es que esta es la limitación. –

Respuesta

8

Como ya dijo Neil, la compatibilidad incluye aspectos como convención de llamadas, manipulación de nombre, etc. Aunque estos dos son los problemas más pequeños posibles. LLVM ya conoce todas las convenciones de llamadas específicas de Windows (stdcall, fastcall, thiscall), esta es la razón por la que puede llamar a cosas desde .dll's.

Si hablamos de código C++, entonces el problema principal es C++ ABI: diseño vtable, implementación rtti, etc. clang sigue Itanium C++ ABI (que usa gcc, por ejemplo, entre otros), VCPP - does not y all estos son indocumentados, desafortunadamente. Hay algo de trabajo en marcha en esta dirección, por lo que las cosas podrían comenzar a funcionar aparentemente. Tenga en cuenta que lo más probable es que algunas partes nunca se cubran, p. manejo de excepciones basado en seh en win32, porque está patentado.

La vinculación con el código C puro funcionó durante años, por lo que puede solucionar estos problemas relacionados con C++ ABI a través de C stubs/wrappers.

1

Aparte de cualquier otra cosa, como convenciones de llamadas, uso de registro, etc., para el código C++ a compatible binario, los dos compiladores deben usar el mismo esquema de creación de nombres. Estos esquemas son exclusivos (por lo que MS no divulga los detalles si se trata de su esquema) y, en cualquier caso, se encuentran en un estado constante de flujo.

+1

Encontré la documentación para el esquema de creación de nombres de Microsoft (incluso en Wikipedia), así que no creo que esa sea la causa principal. Todavía no investigué si es posible cambiar el esquema de manipulación con un interruptor de línea de comando. Comprobaré cuando llegue a casa. – Andos

+0

@Andos No lo es, y es una de las razones principales. Wikipedia no es documentación. –

+0

la manipulación de nombres es el problema más pequeño posible aquí, realmente. El principal problema es la compatibilidad C++ ABI. –

Cuestiones relacionadas