w64 setup portable para instalar c++ gcc g++ mingw visual-c++

c++ - portable - mingw-get-setup



Vinculación a la DLL de MSVC desde MinGW (4)

Estoy casi seguro de que no puede vincular bibliotecas C ++ en compiladores como ese. Lo he intentado, muy duro, pero fue hace mucho tiempo y no recuerdo los detalles. Creo que para las bibliotecas C es posible, con muchos hacks.

Estoy intentando vincular el LizardTech GeoExpress DSDK en mi propia aplicación. Uso gcc para que podamos compilar en plataformas. En Linux y Mac esto funciona fácilmente: proporcionan una biblioteca estática ( libltidsdk.a ) y encabezados, y todo lo que tenemos que hacer es usarlos.

Compilar para Windows no es tan fácil. Han construido la biblioteca usando Microsoft Visual Studio, y usamos MinGW. He leído las preguntas frecuentes de MinGW y me encuentro con los siguientes problemas. La biblioteca es todo C ++, entonces mi primera pregunta: ¿esto es posible?

El solo hecho de vincularlo con el dll proporciona los errores de "referencia indefinida" para todas las llamadas de C ++ (constructores, desctructores, métodos, etc.).

Basado en MinGW Wiki: http://www.mingw.org/wiki/MSVC%5Fand%5FMinGW%5FDLLs Debería ser capaz de usar la utilidad reimp para convertir un .lib en algo utilizable. Probé todos los archivos .lib proporcionados por LizardTech, y todos dan una "biblioteca de importación no válida o corrupta". He probado tanto la versión 0.4 como la 0.3 de la utilidad Reimp.

Utilizando el segundo método descrito en el wiki, he ejecutado pexport y dlltool sobre el dll para obtener un archivo .a, pero eso produce las mismas referencias indefinidas.

Por cierto: He leído la discusión a continuación. Dejó cierta ambigüedad en cuanto a si esto es posible, y dada la página MinGW Wiki parece que esto debería ser factible. Si es imposible, eso es todo lo que necesito saber. Si se puede hacer, me gustaría saber cómo puedo lograr que esto suceda.

Cómo vincular a VS2008 generado .libs desde g ++

¡Gracias!


No puedes hacer esto. Han exportado clases de C ++ desde su dll, en lugar de C-funciones. La diferencia es que las funciones de c ++ siempre se exportan con nombres en forma desfigurada que son específicos de una versión particular del compilador.

Su dll es utilizable por msvc solo en esa forma, y ​​probablemente ni siquiera funcionará entre diferentes versiones de msvc, ya que Microsoft ha cambiado su esquema de mapeo antes.

Si tiene algún tipo de influencia, necesita hacer que cambien sus formas malvadas. De lo contrario, tendrá que usar MSVC para escribir un shim dll, que importará todas las clases y las reexportará a través de las funciones c que devuelven las interfaces.


Para usar una DLL en Windows, enlaza con una biblioteca de importación (no con la DLL). Las bibliotecas de importación suelen tener la extensión .lib (al igual que las bibliotecas estáticas). Si descarga el SDK de Windows, obtendrá bibliotecas de importación para todas las DLL del sistema.

A partir de tu pregunta, parece que pudiste mezclar el .dll con .lib. ¿Estás seguro de que Reimp no toma una DLL como entrada y crea una biblioteca de importación .LIB que sea compatible con MinGW?

Acabo de mirar con MinGW está en Wikipedia. Según ese artículo, MinGW viene con bibliotecas de importación redistribuibles.