Pregunta

La mayoría de los archivos binarios precompilados de Windows se crean con la cadena de herramientas MSYS+gcc.Utiliza el tiempo de ejecución MSVCRT, que es incompatible con Visual C++ 2005/2008.

Entonces, cómo compilar Cairo 1.6.4 (o posterior) solo para Visual C++.Incluyendo dependencias (png,zlib,pixman).

¿Fue útil?

Solución

Aquí hay instrucciones para construir Cairo/Cairomm con Visual C++.

Requerido:

  • Visual C++ 2008 Express SP1 (ahora incluye SDK)
  • MSYS 1.0

Para utilizar las herramientas de línea de comandos de VC++, se debe ejecutar un archivo por lotes 'vcvars32.bat'.

    C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vcvars32.bat

ZLib

Descargue (y extraiga) zlib123.zip de http://www.zlib.net/

    cd zlib123
    nmake /f win32/Makefile.msc

    dir
        # zlib.lib is the static library
        #
        # zdll.lib is the import library for zlib1.dll
        # zlib1.dll is the shared library

libpng

Descargue (y extraiga) lpng1231.zip de http://www.libpng.org/pub/png/libpng.html

El compilador VC++ 9.0 ofrece muchas advertencias de "esto podría ser inseguro".Ingnóralos;esto es pánico de seguridad de MS (el código es bueno).

    cd lpng1231\lpng1231        # for some reason this is two stories deep

    nmake /f ../../lpng1231.nmake ZLIB_PATH=../zlib123

    dir
        # libpng.lib is the static library
        #
        # dll is not being created

Pixman

Pixman es parte de Cairo, pero es una descarga independiente.

Descargue (y extraiga) pixman-0.12.0.tar.gz de http://www.cairographics.org/releases/

Utilice MSYS para descomprimir mediante 'tar -xvzf pixman*.tar.gz'

Tanto Pixman como El Cairo tiene makingfiles para el compilador de línea de comandos Visual C ++ (CL), pero usan GNU Makefile y herramientas similares a Unix (SED, etc.).Esto significa que tenemos que ejecutar la marca desde MSYS.

Abra un símbolo del sistema con las herramientas de línea de comandos VC++ habilitadas (pruebe con 'cl /?').Convierta ese símbolo del sistema en un símbolo del sistema MSYS mediante 'C:\MSYS\1.0\MSYS.BAT'.

NO use el ícono MSYS, porque entonces su mensaje ahora sabrá de VC++.No puede ejecutar archivos .bat desde MSYS.

Pruebe que las herramientas VC++ funcionan desde aquí:'cl-?'

Prueba que Gnu make también funciona:'hacer -v'.

Fresco.

    cd     (use /d/... instead of D:)
    cd pixman-0.12.0/pixman
    make -f Makefile.win32

Este valor predeterminado a las optimizaciones MMX y SSE2, que requieren un procesador X86 nuevo (Pentium 4 o Pentium más arriba: http://fi.wikipedia.org/wiki/SSE2 )

Hay bastantes advertencias pero parece tener éxito.

    ls release
        # pixman-1.lib  (static lib required by Cairo)

Permanezca en el indicador MSYS especiado de VC++ para que Cairo también pueda compilar.

El Cairo

Descargue (y extraiga) cairo-1.6.4.tar.gz desde http://www.cairographics.org/releases/

    cd 
    cd cairo-1.6.4

El Makefile.win32 aquí es casi bueno, pero tiene la ruta Pixman cableada.

Utilice el 'Makefile-cairo.win32' modificado:

    make -f ../Makefile-cairo.win32 CFG=release \
            PIXMAN_PATH=../../pixman-0.12.0 \
            LIBPNG_PATH=../../lpng1231 \
            ZLIB_PATH=../../zlib123

(Escribe todo en una línea, ignorando las barras invertidas)

Dice "no hay regla para crear 'src/cairo-features.h'.Use el preparado manualmente (en El Cairo> 1.6.4 puede haber un 'Src/Cairo-Features-Win32.h' que simplemente puede cambiar el nombre):

    cp ../cairo-features.h src/

Vuelva a intentar el comando make (la flecha hacia arriba lo recuerda).

    ls src/release
        #
        # cairo-static.lib

cairomm (API C++)

Descargue (y extraiga) cairomm-1.6.4.tar.gz desde http://www.cairographics.org/releases/

Hay un proyecto de Visual C++ 2005 que podemos usar (mediante apertura y actualización) para 2008.

    cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

Cambios que deben realizarse:

  • Cambiar la configuración activa a "Liberar"

  • Propiedades de Cairomm-1.0 (con menú contextual)

        C++/General/Additional Include Directories: 
            ..\..\..\cairo-1.6.4\src    (append to existing)

        Linker/General/Additional library directories:
            ..\..\..\cairo-1.6.4\src\release
            ..\..\..\lpng1231\lpng1231
            ..\..\..\zlib123

        Linker/Input/Additional dependencies:   
            cairo-static.lib libpng.lib zlib.lib msimg32.lib
  • Mejoramiento:código FPU rápido
            C++/Code generation/Floating point model
                Fast

Haga clic derecho en 'cairomm-1.0' y 'compilar'.Hay algunas advertencias.

    dir cairomm-1.6.4\MSVC_Net2005\cairomm\Release
        #
        # cairomm-1.0.lib
        # cairomm-1.0.dll
        # cairomm.def

Otros consejos

Estos pasos pueden crear el último cairo el 15/11/2015 para la comunidad de Visual Studio 2015.La compilación de depuración es DLL y se vincula a la versión DLL de CRT.La versión de lanzamiento es una biblioteca estática, que se vincula a la versión de enlace estático de CRT y no requiere archivos DLL.

Instalar GnuWin

Los scripts de compilación requieren herramientas de línea de comandos GNU.Los siguientes pasos se prueban con GnuWin de Chocolatey.MSYS también podría funcionar.

Descargar

zlib128.zip, lpng1619.zip, el cairo-1.14.4.tar.xz, pixman-0.32.8.tar.gz

Extracto

Extraiga estos archivos y cambie el nombre de los directorios:

. (my_cairo_build_root)
├─cairo
├─libpng
├─pixman
└─zlib

zlib

No construyas.El script de compilación utiliza MSVCRT que no coincide con Visual Studio 2015.Utilice la biblioteca generada a partir de libpng build.

libpng

Editar libpng\projects\vstudio\zlib.props:

  • en <ZLibSrcDir> eliminar el número de versión: ..\..\..\..\zlib
  • en <WindowsSDKDesktopARMSupport> cambiar true a false

Abierto libpng\projects\vstudio\vstudio.sln en Visual Studio y confirme la actualización.Utilice el valor predeterminado Debug configuración y haga clic derecho en el proyecto libpng para construir.Cambiar a Release Library configuración y clic derecho en proyecto libpng para construir.

pixman

Editar pixman\Makefile.win32.common:

  • Reemplazar CFG_CFLAGS = -MD -O2 con CFG_CFLAGS = -MT -O2 (vinculando a la versión de enlace estático de CRT en la versión de lanzamiento)
  • Reemplazar @mkdir con @"mkdir" (hay cmdestá incorporado mkdir y GnuWin mkdir, las comillas obligan a utilizar este último)

Ejecute el símbolo del sistema nativo de Visual Studio x86 desde el menú de inicio:

cd /d my_cairo_build_root
cd pixman\pixman
make -f Makefile.win32
make -f Makefile.win32 CFG=debug

El Cairo

Editar cairo\build\Makefile.win32.common:

  • Reemplazar CFG_CFLAGS = -MD -O2 con CFG_CFLAGS = -MT -O2
  • Reemplazar CAIRO_LIBS += $(LIBPNG_PATH)/libpng.lib con CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/libpng16.lib.Ahora, copia el directorio. libpng\projects\vstudio\Debug en (creado) libpng\lib\ y cambiarle el nombre a debug.Copiar el directorio libpng\projects\vstudio\Release Library en libpng\lib\ y cambiarle el nombre a release.
  • Reemplazar CAIRO_LIBS += $(ZLIB_PATH)/zdll.lib con CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/zlib.lib
  • Hay dos @mkdir -p $(CFG)/`dirname $<` líneas.Reemplace ambos con:

    @"mkdir" -p $(CFG)/$<
    @"rmdir" $(CFG)/$<
    

Editar cairo\build\Makefile.win32.features-h:

  • Reemplaza todo @echo con @"echo"

hay un inservible link.exe en GnuWin.Rebautizar C:\GnuWin\bin\link.exe a link_.exe para evitar enfrentamientos.

Ejecute el símbolo del sistema nativo de Visual Studio x86 desde el menú de inicio:

cd /d my_cairo_build_root
cd cairo
make -f Makefile.win32 CFG=debug
make -f Makefile.win32 CFG=release

Los dos últimos comandos mostrarán "Built successfully!" pero devuelve error.Ingnóralos.

cambiar el nombre de nuevo C:\GnuWin\bin\link.exe.

Configurar Visual Studio

Crear un directorio include y copie los siguientes encabezados en:

  • cairo\cairo-version.h (no cairo\src\cairo-version.h)
  • cairo\src\*.h, Excluyendo cairo\src\cairo-version.h

Agregue ese directorio para incluir la ruta en Visual Studio.

Agregar cairo\src\$(Configuration) y libpng\lib\$(Configuration) a la ruta de la biblioteca. $(Configuration) se expandirá automáticamente a Debug o Release al construir.

Poner cairo\src\debug\cairo.dll y libpng\lib\debug\libpng16.dll a uno de Windows PATH.

Antes #include <cairo.h>, configure las opciones de enlace:

#ifndef NDEBUG
#   pragma comment(lib, "cairo")
#else
#define CAIRO_WIN32_STATIC_BUILD
#   pragma comment(lib, "cairo-static")
#   pragma comment(lib, "libpng16")
#   pragma comment(lib, "zlib")
#endif

Las instrucciones no parecen funcionar con la versión actual de imlib. Me pregunto si vale la pena volver a hacer esta pregunta.

¿Consultaste aquí? http://cairographics.org/visualstudio/ ?¿Qué quiere decir con "Utiliza el tiempo de ejecución MSCVRT, que es incompatible con Visual C++ 2005/2008"?¿Cuáles son los problemas exactos que estás teniendo?

Me encontré con dos problemas al compilar en Windows (Visual Studio 2008, GNU Make 3.81):

  1. Construcciones "if" no válidas en src/Makefile.sources.Se arregló eso usando

    sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
    
  2. _lround no está disponible en Windows/MSVC.Se solucionó eso usando

    sed "s/#define _cairo_lround lround/static inline long cairo_const
    _cairo_lround(double r) { return (long)floor(r + .5); }/"`  
    

    (que probablemente sea una mala solución)

Dejando de lado estos problemas, todo funciona muy bien (tanto para arquitecturas x86 como para x86_64).

He hecho esto, pero no tengo instrucciones escritas.Mis compilaciones también son bastante mínimas ya que no he necesitado soporte para, por ejemplo.Archivos PNG y SVG, solo lo usé para representar gráficos vectoriales generados en búferes de memoria.

Pero lo que hice fue leer el config.h y otros archivos para el sistema de compilación UNIX/GNU y escribir el mío propio adecuado para MSVC, y luego crear un proyecto con los archivos fuente apropiados.Probablemente, en el mejor de los casos, te llevará unas horas hacer esto, pero cuando hayas terminado, simplemente funcionará;)

Editar:Consulte esta página, tiene un proyecto MSVC 2003 (7.1) para construir el Cairo: http://slinavlee.googlepages.com/

La cadena de herramientas MSYS+gcc utiliza la antigua biblioteca de tiempo de ejecución MSVCRT (ahora integrada en Windows) y Visual C++ 2005/2008 trae la suya propia.Es un hecho conocido ese código no debería depender de múltiples tiempos de ejecución.Pasando cosas s.a.identificadores de archivos, punteros de memoria, etc.se verá afectado y provocará fallos aparentemente aleatorios en tal escenario.

Esto no me ha picado.Por otra parte, tampoco me dirijo a Windows.Pero me han dicho lo suficiente como para ni siquiera probar la solución.

Lo que podría haber funcionado es vincular todas las dependencias estáticamente a la biblioteca (por ejemplo, Cairomm).Las bibliotecas estáticas no tienen un tiempo de ejecución vinculado, ¿verdad?Pero no intenté esto.De hecho, logré que la compilación VC++ de todos los ingredientes funcionara, pero tomó días.

No había encontrado la URL que proporcionas.Extraño en sí mismo;Miré por todas partes'.Por otra parte, es para Visual Studio 2003.NET, por lo que ya hay dos generaciones detrás.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top