Frage

Die meisten vorkompilierten Windows -Binärdateien werden mit der MSYS+GCC Toolchain hergestellt. Es verwendet die msvcrt -Laufzeit, die mit visuellem C ++ 2005/2008 nicht kompatibel ist.

Wie man also nur für visuelle C ++ Cairo 1.6.4 (oder später) umgeht und sie zusammenstellt. Einschließlich Abhängigkeiten (PNG, ZLIB, Pixman).

War es hilfreich?

Lösung

Hier finden Sie Anweisungen zum Bau von Kairo/Cairomm mit visuellem C ++.

Erforderlich:

  • Visual C ++ 2008 Express SP1 (enthält jetzt SDK)
  • MSYS 1.0

Um die Befehlszeilen -Tools von VC ++ zu verwenden, muss eine Batch -Datei 'vcvars32.bat' ausgeführt werden.

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

Zlib

Herunterladen (und extrahieren) zlib123.zip von 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

Herunterladen (und extrahieren) lpng1231.zip von http://www.libpng.org/pub/png/libpng.html

Der VC ++ 9.0 Compiler enthält eine Menge "Dies könnte unsicher" Warnungen. Ignoriere sie; Dies ist MS Security Panic (der Code ist gut).

    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 ist Teil von Kairo, aber ein separater Download.

Download (und extrahieren) Pixman-0.12.0.tar.gz von http://www.cairographics.org/releases/

Verwenden Sie MSYs, um über 'tar -xvzf pixman*.tar.gz' zu uNSAr '

Sowohl Pixman als auch Kairo haben Makefiles für visuelle C ++-Befehlszeilencompiler (CL), verwenden jedoch GNU Makefile und Unix-ähnliche Werkzeuge (SED usw.). Dies bedeutet, dass wir die Make von innerhalb von MSYS ausführen müssen.

Öffnen Sie eine Eingabeaufforderung mit aktivierten Befehlszeilen -Tools mit VC ++ (versuchen Sie 'cl /?'). Verwandeln Sie diese Eingabeaufforderung in eine MSYS -Eingabeaufforderung von 'C: msys 1.0 msys.bat'.

Verwenden Sie das MSYS -Symbol nicht, da Ihre Eingabeaufforderung jetzt VC ++ kennt. Sie können .bat -Dateien nicht von MSYS ausführen.

Versuchen Sie, dass VC ++ -Tools hier funktionieren: 'Cl -?'

Versuchen Sie, dass GNU auch funktioniert: 'mach -v'.

Kühl.

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

Dies ist standardmäßig für MMX- und SSE2 -Optimierungen, für die ein neuer X86 -Prozessor erforderlich ist (Pentium 4 oder Pentium m oder höher: http://fi.wikipedia.org/wiki/sse2 )

Es gibt einige Warnungen, aber es scheint erfolgreich zu sein.

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

Bleiben Sie in der VC ++ Spiced MSYS -Aufforderung, auch Kairo zu kompilieren.

Kairo

Download (und extrahieren) kairo-1.6.4.tar.gz von http://www.cairographics.org/releases/

    cd 
    cd cairo-1.6.4

Die Makefile.win32 hier ist fast gut, hat aber den Pixman -Pfad fest verdrahtet.

Verwenden Sie den geänderten 'Makefile-Cairo.Win32':

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

(Schreiben Sie alles in einer Zeile und ignorieren Sie die Backslashes)

Es heißt "Keine Regel, um SRC/Kairo-Merkmale zu machen. :

    cp ../cairo-features.h src/

Wiederieren Sie den Befehl machen (Pfeil erinnert sich daran).

    ls src/release
        #
        # cairo-static.lib

cairomm (c ++ api)

Herunterladen (und extrahieren) cairomm-1.6.4.tar.gz von http://www.cairographics.org/releases/

Es gibt ein visuelles C ++ 2005 -Projekt, das wir für 2008 verwenden können (über Open & Upgrade).

    cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

Änderungen, die vorgenommen werden müssen:

  • Ändern Sie die aktive Konfiguration in "Release"

  • CAIROMM-1.0 Eigenschaften (mit Rechtsklickmenü)

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

Klicken Sie mit der rechten Maustaste auf 'Cairomm-1.0' und 'Build'. Es gibt einige Warnungen.

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

Andere Tipps

Diese Schritte können den neuesten Kairo am 2015-11-15 für die Visual Studio 2015-Community aufbauen. Der Debug -Build ist DLL, der mit der DLL -Version von CRT verknüpft ist. Der Release -Build ist eine statische Bibliothek, die mit der statischen Linkversion von CRT verknüpft ist und keine DLLs erfordert.

Installieren Sie Gnuwin

Die Build -Skripte erfordern GNU -Befehlszeilen -Tools. Die folgenden Schritte werden mit getestet Gnuwin von schokoladig. MSYs könnten auch funktionieren.

Download

ZLIB128.zip, LPNG1619.zip, kairo-1.14.4.tar.xz, Pixman-0.32.8.tar.gz

Extrakt

Extrahieren Sie diese Archive und benennen Sie die Verzeichnisse um:

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

Zlib

Nicht bauen. Das Build -Skript verwendet MSVCRT, das mit Visual Studio 2015 zusammenstößt. Verwenden Sie die generierte LIB von libpng Build.

libpng

Bearbeiten libpng\projects\vstudio\zlib.props:

  • in <ZLibSrcDir> Entfernen Sie die Versionsnummer: ..\..\..\..\zlib
  • in <WindowsSDKDesktopARMSupport> Rückgeld true zu false

Offen libpng\projects\vstudio\vstudio.sln in Visual Studio und bestätigen Sie das Upgrade. Verwenden Sie den Standard Debug Konfiguration und mit der rechten Maustaste auf Projekt libpng bauen. Wechseln zu Release Library Konfiguration und rechte Klicken Sie mit der rechten Maustaste auf Projekt libpng bauen.

Pixman

Bearbeiten pixman\Makefile.win32.common:

  • Ersetzen CFG_CFLAGS = -MD -O2 mit CFG_CFLAGS = -MT -O2 (Verknüpfung mit der statischen Linkversion von CRT in Release Build)
  • Ersetzen @mkdir mit @"mkdir" (es gibt cmd's gebaut mkdir und Gnuwins mkdir, Die Zitate zwingen, letztere zu verwenden)

Führen Sie Visual Studio X86 native Eingabeaufforderung aus dem Startmenü aus:

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

Kairo

Bearbeiten cairo\build\Makefile.win32.common:

  • Ersetzen CFG_CFLAGS = -MD -O2 mit CFG_CFLAGS = -MT -O2
  • Ersetzen CAIRO_LIBS += $(LIBPNG_PATH)/libpng.lib mit CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/libpng16.lib. Kopieren Sie nun das Verzeichnis libpng\projects\vstudio\Debug in (erstellt) libpng\lib\ und benennen es um um debug. Kopieren Sie das Verzeichnis libpng\projects\vstudio\Release Library hinein libpng\lib\ und benennen es um um release.
  • Ersetzen CAIRO_LIBS += $(ZLIB_PATH)/zdll.lib mit CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/zlib.lib
  • Es gibt zwei @mkdir -p $(CFG)/`dirname $<` Linien. Ersetzen Sie beide durch:

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

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

  • Alles ersetzen @echo mit @"echo"

Es gibt eine unbrauchbare link.exe in Gnuwin. Umbenennen C:\GnuWin\bin\link.exe zu link_.exe Umeinander zu vermeiden.

Führen Sie Visual Studio X86 native Eingabeaufforderung aus dem Startmenü aus:

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

Die letzten beiden Befehl werden zeigen "Built successfully!" aber Rückgabefehler. Ignoriere sie.

Wieder umbenennen C:\GnuWin\bin\link.exe.

Konfigurieren Sie Visual Studio

Erstellen Sie ein Verzeichnis include und kopieren Sie die folgenden Header in:

  • cairo\cairo-version.h (nicht cairo\src\cairo-version.h)
  • cairo\src\*.h, ausschließlich cairo\src\cairo-version.h

Fügen Sie dieses Verzeichnis hinzu, um den Pfad in Visual Studio aufzunehmen.

Hinzufügen cairo\src\$(Configuration) und libpng\lib\$(Configuration) zum Bibliotheksweg. $(Configuration) wird automatisch zu erweitern auf Debug oder Release Beim Bauen.

Stellen cairo\src\debug\cairo.dll und libpng\lib\debug\libpng16.dll zu einem von Windows ' PATH.

Vor #include <cairo.h>, Richten Sie die Linkoptionen ein:

#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

Die Anweisungen scheinen nicht mit der aktuellen Version von Imlib zu funktionieren. Ich frage mich, ob es sich lohnt, diese Frage zu versichern.

Hast du hier überprüft: http://cairographics.org/visualstudio/ ? Was meinst du damit 'Es verwendet MSCVRT -Laufzeit, was mit Visual C ++ 2005/2008 nicht kompatibel ist? Was sind die genauen Probleme, die Sie haben?

Ich war auf zwei Probleme beim Erstellen von Windows (Visual Studio 2008, GNU Make 3.81):

  1. Ungültige "if" konstruiert in src/makefile.sources. Repariert das mit

    sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
    
  2. _lround ist unter Windows/MSVC nicht verfügbar. Arbeitete damit herum

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

    (was wahrscheinlich eine schlechte Lösung ist)

Abgesehen von diesen Problemen funktioniert alles großartig (für X86- und X86_64 -Architekturen).

Ich habe das getan, aber ich habe keine bereitgeschriebenen Anweisungen. Meine Builds sind auch ziemlich minimal, da ich für z. B. keine Unterstützung benötigt. PNG- und SVG -Dateien, ich habe es gerade verwendet, um generierte Vektorgrafiken in Speicherpuffer zu rendern.

Aber was ich tat, war durch das gelesen config.h und andere Dateien für das UNIX/GNU -Build -System und schreiben mein eigenes für MSVC geeignet und erstellen dann ein Projekt mit den entsprechenden Quelldateien. Es dauert wahrscheinlich bestenfalls ein paar Stunden, um dies zu tun, aber wenn Sie fertig sind, funktioniert es einfach;)

Bearbeiten: Wenn Sie diese Seite sehen, verfügt sie über ein MSVC 2003 (7.1) -Projekt zum Erstellen von Kairo: http://silinavlee.googlepages.com/

MSYS+GCC Toolchain verwendet die alte MSVCRT -Laufzeitbibliothek (jetzt in Windows integriert) und Visual C ++ 2005/2008 bringen ihre eigenen. Es ist ein Bekannte Tatsache Dieser Code sollte nicht von mehreren Laufzeiten abhängen. Das Übergeben von Dingen SA -Dateihandles, Speicherzeiger usw. wird in einem solchen Szenario scheinbar zufällige Abstürze verursacht.

Ich bin nicht davon eingeßt worden. Andererseits ziele ich auch nicht mehr Windows mehr an. Aber Mir wurde genug gesagt, dass ich die Lösung nicht einmal ausprobieren soll.

Was hätte funktionieren können, ist die Verknüpfung aller Abhängigkeiten statisch mit der LIB (z. B. Cairomm). Statische Bibliotheken haben keine Laufzeit an sie gebunden, oder? Aber ich habe das nicht versucht. Ich habe tatsächlich das VC ++ -Ausgebäude aller Zutaten zum Arbeiten gebracht, aber es hat Tage gedauert.

Ich hatte die URL, die Sie geben, nicht gefunden. Seltsam an sich; Ich habe überall geschaut'. Andererseits ist es für Visual Studio 2003.NET, also zwei Generationen dahinter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top