C++-Protobuf no se compila en VS2012. Ahora quiero usar MinGW para compilar en windows. Por favor alguien puede darme algunas breves palabras clave sobre cómo compilar protobuf en Win7 x64. Ya he instalado MinGW con la instalación de la GUI. Google escribe como MinGW aviso de configuración que debería referirse a la de Unix notas de instalación. Pero no puedo averiguar cómo utilizar la función de auto herramientas en windows.

Editar

Bueno esto es lo que he hecho hasta ahora:

$ mount C:/ WinDir
$ cd ./[...]/protobuf.2.4.1
$ ./configure
$ minGW32-make.exe
$ minGW32-make.exe check

minGW32-make.exe se ejecuta sin errores, pero ninguna de las pruebas se ejecutan y no puedo encontrar libprotobuf.lib. Hay algunos libprotobuf.dll pero tengo la lib, no yo?.

3 Comentarios

  1. 2

    Usted debe tener un MSys de la consola junto con su instalación de MinGW. Esta consola ofrece un linux como entorno en el que usted debería ser capaz de utilizar las autotools normalmente.

    Si MSys no está instalado, se puede tomar desde el MinGW sitio demasiado.

    cd a su directorio con las fuentes y tratar el habitual:

    $ ./configure
    $ make

    Algunas bibliotecas causar problemas en Windows, pero la mayoría de compilar bien con MinGW y MSys. Volver y agregar más información a tu pregunta si te encuentras en problemas específicos.


    Edición:

    minGW32-make.exe se ejecuta sin errores, pero ninguna de las pruebas se ejecutan y no puedo encontrar libprotobuf.lib. Hay algunos libprotobuf.dll pero tengo la lib, no yo?.

    Generalmente por una librería dinámica que había protobuf.dll (la biblioteca dinámica) y libprotobuf.a (la estática contenedor de la biblioteca).

    La hora de ligar, acaba de pasar -lprotobuf para el linker se verá por tanto libprotobuf.a y protobuf.lib.

    (.lib es otra biblioteca estática formato, lo cual en parte es manejado por MinGW, pero no nativos de aquí.)

    • ¿No es eso exactamente lo que el OP lo hizo?
    • Podría haber sido el caso, que yo no podía saber antes de editar el post.
    • Huy, el OP tenido que editar después de ser publicado. Lo siento mucho! Al parecer, el voto ha sido bloqueado, así que si usted hace un cambio menor para que yo, por supuesto, revisar mi downvote!
  2. 1

    Usted no va a trabajar con un .lib archivo cuando se utiliza el MinGW conjunto de herramientas. En su lugar, usted es capaz de enlace con el archivo dll directamente. El MinGW Wiki lo explica.

    • +1 para una buena referencia. Pero supongo que «la vinculación con el archivo DLL directamente» se conectará en forma estática en su lugar de forma dinámica, es eso correcto? IIRC para la vinculación dinámica que cargar la biblioteca manual o el uso de un contenedor estático que hace que para usted – que es lo que el libNAME.a contenedores generado junto con el archivo DLL hacer bajo el capó.
    • No estoy seguro de si se puede tener el gestor de código generado automáticamente por el solo pasar el archivo DLL al vinculador con algunos bandera; ¿puede confirmar?
    • Eso depende de cómo se vincula exactamente. Yo lo hago como se mencionó en la Wiki llamando g++ -o example_exe.exe example_exe.o example_dll.dll que no requiere la entrada de la biblioteca.
    • Sí, parece que funciona. Gracias por señalarlo. Me pregunto qué archivos Dll son compatibles en este camino (como pueden ser los archivos dll de C de MSVC demasiado?).
    • No, esto sólo funcionará con archivos Dll creada por el MinGW conjunto de herramientas. Su especie de «normal» en forma de enlace en contra de bibliotecas (.así que en ese caso) en sistemas *NIX y MinGW espejos esto en windows.
  3. -1

    Podía conseguir dll y lib de ambos. Esto es cuando usted no desea estática archivo lib y desea utilizar la dll y el archivo lib.
    Debe realizar los siguientes cambios en Protobuf código:

    1. Abrir el proyecto en VS. O cualquier otro editor. Yo uso VS2015.
    2. En libProtoBuf la configuración del proyecto, en C/Preprocesador de C++ agregar siguientes indicadores.
      PROTOBUF_USE_DLLS; LIBPROTOBUF_EXPORTS;
      Esas banderas de exportar la información de profobuf utilizando dllexport

    3. en ur código de cliente en el que se utiliza Protobuf, definir: PROTOBUF_USE_DLLS. Que va a hacer protobuf incluye el uso de dllimport.

    Una vez hecho el paso 2, podrá ver tanto dll y lib en la carpeta de salida. De lo contrario, siempre se verá sólo dll y no archivo lib.

    Espero que esto ayude. Si no, por favor escribir un mensaje aquí y me puede ayudar a conseguir esta solucionado.

Dejar respuesta

Please enter your comment!
Please enter your name here