Domanda

La maggior parte dei binari Windows precompilati sono realizzati con la toolchain MSYS+gcc.Utilizza il runtime MSVCRT, che è incompatibile con Visual C++ 2005/2008.

Quindi, come procedere e compilare Cairo 1.6.4 (o successivo) solo per Visual C++.Comprese le dipendenze (png,zlib,pixman).

È stato utile?

Soluzione

Ecco le istruzioni per costruire Cairo/Cairomm con Visual C++.

Necessario:

  • Visual C++ 2008 Express SP1 (ora include SDK)
  • MSYS 1.0

Per utilizzare gli strumenti da riga di comando VC++, è necessario eseguire un file batch "vcvars32.bat".

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

ZLib

Scarica (ed estrai) zlib123.zip da 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

Scarica (ed estrai) lpng1231.zip da http://www.libpng.org/pub/png/libpng.html

Il compilatore VC++ 9.0 fornisce moltissimi avvisi "potrebbe non essere sicuro".Ignorali;questo è il panico della sicurezza MS (il codice è buono).

    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 fa parte del Cairo, ma è un download separato.

Scarica (ed estrai) pixman-0.12.0.tar.gz da http://www.cairographics.org/releases/

Usa MSYS per decomprimere tramite 'tar -xvzf pixman*.tar.gz'

Sia Pixman che Cairo hanno i file di makefiles per il compilatore di comando Visual C ++ (CL), ma usano gli strumenti GNU MakeFile e Unix simili a UNIX (SED ecc.).Ciò significa che dobbiamo eseguire la marca all'interno di MSY.

Apri un prompt dei comandi con gli strumenti da riga di comando VC++ abilitati (prova "cl /?").Trasforma il prompt dei comandi in un prompt MSYS con "C:\MSYS\1.0\MSYS.BAT".

NON utilizzare l'icona MSYS, perché in questo caso il tuo prompt ora riconoscerà VC++.Non è possibile eseguire file .bat da MSYS.

Prova che gli strumenti VC++ funzionano da qui:'cl-?'

Prova che anche Gnu make funzioni:'make -v'.

Freddo.

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

Questo impostazione predefinita è per le ottimizzazioni MMX e SSE2, che richiedono un nuovo processore X86 (Pentium 4 o Pentium M o superiore: http://fi.wikipedia.org/wiki/SSE2 )

Ci sono alcuni avvertimenti ma sembra che abbia successo.

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

Rimani nel prompt MSYS speziato di VC++ affinché anche Cairo venga compilato.

Cairo

Scarica (ed estrai) cairo-1.6.4.tar.gz da http://www.cairographics.org/releases/

    cd 
    cd cairo-1.6.4

Il Makefile.win32 qui è quasi buono, ma ha il percorso Pixman cablato.

Utilizza il "Makefile-cairo.win32" modificato:

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

(Scrivi tutto su una riga, ignorando le barre rovesciate)

Dice "nessuna regola per creare 'src/cairo-features.h'.Usa quello preparato manualmente (al Cairo> 1.6.4 potrebbe esserci un 'SRC/Cairo-Features-win32.h' che puoi semplicemente rinominare):

    cp ../cairo-features.h src/

Riprova il comando make (la freccia su lo ricorda).

    ls src/release
        #
        # cairo-static.lib

Cairomm (API C++)

Scarica (ed estrai) cairomm-1.6.4.tar.gz da http://www.cairographics.org/releases/

Esiste un progetto Visual C++ 2005 che possiamo utilizzare (tramite apertura e aggiornamento) per il 2008.

    cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

Modifiche da apportare:

  • Modifica la configurazione attiva in "Rilascia"

  • Proprietà Cairomm-1.0 (con il menu contestuale)

        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
  • Ottimizzazione:codice FPU veloce
            C++/Code generation/Floating point model
                Fast

Fare clic con il tasto destro su "cairomm-1.0" e "build".Ci sono alcuni avvertimenti.

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

Altri suggerimenti

Questi passaggi possono creare l'ultima versione di Cairo il 15-11-2015 per la community di Visual Studio 2015.La build di debug è DLL, che si collega alla versione DLL di CRT.La build di rilascio è una libreria statica, che si collega alla versione di collegamento statico di CRT e non richiede DLL.

Installa GnuWin

Gli script di compilazione richiedono strumenti da riga di comando GNU.Vengono testati i seguenti passaggi GnuWin di Chocolatey.Anche MSYS potrebbe funzionare.

Scaricamento

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

Estratto

Estrai questi archivi e rinomina le directory:

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

zlib

Non costruire.Lo script di compilazione utilizza MSVCRT che è in conflitto con Visual Studio 2015.Utilizza la libreria generata dalla build libpng.

libpng

Modificare libpng\projects\vstudio\zlib.props:

  • In <ZLibSrcDir> rimuovere il numero di versione: ..\..\..\..\zlib
  • In <WindowsSDKDesktopARMSupport> modifica true A false

Aprire libpng\projects\vstudio\vstudio.sln in Visual Studio e confermare l'aggiornamento.Utilizza l'impostazione predefinita Debug configurazione e fare clic con il pulsante destro del mouse su progetto libpng costruire.Passa a Release Library configurazione e fare clic con il pulsante destro del mouse su progetto libpng costruire.

pixman

Modificare pixman\Makefile.win32.common:

  • Sostituire CFG_CFLAGS = -MD -O2 con CFG_CFLAGS = -MT -O2 (collegamento alla versione di collegamento statico di CRT nella build di rilascio)
  • Sostituire @mkdir con @"mkdir" (ci sono cmdè integrato mkdir e quello di GnuWin mkdir, le virgolette obbligano a utilizzare quest'ultimo)

Esegui il prompt dei comandi nativo di Visual Studio x86 dal menu Start:

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

Cairo

Modificare cairo\build\Makefile.win32.common:

  • Sostituire CFG_CFLAGS = -MD -O2 con CFG_CFLAGS = -MT -O2
  • Sostituire CAIRO_LIBS += $(LIBPNG_PATH)/libpng.lib con CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/libpng16.lib.Ora copia la directory libpng\projects\vstudio\Debug in (creato) libpng\lib\ e rinominarlo in debug.Copia la directory libpng\projects\vstudio\Release Library in libpng\lib\ e rinominarlo in release.
  • Sostituire CAIRO_LIBS += $(ZLIB_PATH)/zdll.lib con CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/zlib.lib
  • Ci sono due @mkdir -p $(CFG)/`dirname $<` linee.Sostituiscili entrambi con:

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

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

  • Sostituisci tutto @echo con @"echo"

C'è un inutilizzabile link.exe in GnuWin.Rinominare C:\GnuWin\bin\link.exe A link_.exe per evitare lo scontro.

Esegui il prompt dei comandi nativo di Visual Studio x86 dal menu Start:

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

Verranno visualizzati gli ultimi due comandi "Built successfully!" ma restituisce errore.Ignorali.

Rinomina indietro C:\GnuWin\bin\link.exe.

Configura Visual Studio

Crea una directory include e copia le seguenti intestazioni in:

  • cairo\cairo-version.h (non cairo\src\cairo-version.h)
  • cairo\src\*.h, escluso cairo\src\cairo-version.h

Aggiungi quella directory per includere il percorso in Visual Studio.

Aggiungere cairo\src\$(Configuration) E libpng\lib\$(Configuration) al percorso della biblioteca. $(Configuration) si espanderà automaticamente in Debug O Release durante la costruzione.

Mettere cairo\src\debug\cairo.dll E libpng\lib\debug\libpng16.dll a uno di Windows' PATH.

Prima #include <cairo.h>, imposta le opzioni di collegamento:

#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

Le istruzioni non sembrano funzionare con la versione attuale di imlib, mi chiedo se valga la pena porre nuovamente questa domanda?

Hai controllato qui: http://cairographics.org/visualstudio/ ?Cosa intendi con "Utilizza il runtime MSCVRT, che è incompatibile con Visual C++ 2005/2008"?Quali sono i problemi esatti che stai riscontrando?

Ho riscontrato due problemi durante la creazione su Windows (Visual Studio 2008, GNU Make 3.81):

  1. Costrutti "if" non validi in src/Makefile.sources.Risolto il problema utilizzando

    sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
    
  2. _lround non è disponibile su Windows/MSVC.Ho risolto il problema utilizzando

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

    (che probabilmente è una soluzione scadente)

A parte questi problemi, tutto funziona alla grande (sia per le architetture x86 che x86_64).

L'ho fatto, ma non ho istruzioni già scritte.Anche le mie build sono piuttosto minime in quanto non ho bisogno di supporto per es.PNG e SVG, l'ho appena usato per eseguire il rendering della grafica vettoriale generata nei buffer di memoria.

Ma quello che ho fatto è stato leggere il file config.h e altri file per il sistema di compilazione UNIX/GNU e scrivo il mio adatto per MSVC, quindi creo un progetto con i file sorgente appropriati.Probabilmente ci vorranno al massimo alcune ore per farlo, ma quando hai finito funziona e basta ;)

Modificare:Vedi questa pagina, ha un progetto MSVC 2003 (7.1) per la costruzione del Cairo: http://slinavlee.googlepages.com/

La toolchain MSYS+gcc utilizza la vecchia libreria runtime MSVCRT (ora integrata in Windows) e Visual C++ 2005/2008 ne porta la propria.È un fatto noto quel codice non dovrebbe dipendere da più runtime.Passare le cose s.a.handle di file, puntatori di memoria, ecc.sarà influenzato e causerà arresti anomali apparentemente casuali in tale scenario.

Non sono stato morso da questo.D'altra parte, non mi rivolgo più nemmeno a Windows.Ma mi è stato detto abbastanza per non provare nemmeno la soluzione.

Ciò che avrebbe potuto funzionare è collegare staticamente tutte le dipendenze nella lib (ad esempio Cairomm).Le librerie statiche non hanno un runtime associato, vero?Ma non l'ho provato.In realtà sono riuscito a far funzionare la costruzione VC++ di tutti gli ingredienti, ma ci sono voluti giorni.

Non avevo trovato l'URL che hai fornito.Strano di per sé;Ho guardato "ovunque".D'altra parte, è per Visual Studio 2003.NET, quindi già due generazioni indietro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top