So kompilieren Sie Kairo für Visual C ++ 2008 (Express Edition)
-
01-07-2019 - |
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).
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ückgeldtrue
zufalse
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
mitCFG_CFLAGS = -MT -O2
(Verknüpfung mit der statischen Linkversion von CRT in Release Build) - Ersetzen
@mkdir
mit@"mkdir"
(es gibtcmd
's gebautmkdir
und Gnuwinsmkdir
, 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
mitCFG_CFLAGS = -MT -O2
- Ersetzen
CAIRO_LIBS += $(LIBPNG_PATH)/libpng.lib
mitCAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/libpng16.lib
. Kopieren Sie nun das Verzeichnislibpng\projects\vstudio\Debug
in (erstellt)libpng\lib\
und benennen es um umdebug
. Kopieren Sie das Verzeichnislibpng\projects\vstudio\Release Library
hineinlibpng\lib\
und benennen es um umrelease
. - Ersetzen
CAIRO_LIBS += $(ZLIB_PATH)/zdll.lib
mitCAIRO_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
(nichtcairo\src\cairo-version.h
)cairo\src\*.h
, ausschließlichcairo\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):
Ungültige "if" konstruiert in src/makefile.sources. Repariert das mit
sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
_lround
ist unter Windows/MSVC nicht verfügbar. Arbeitete damit herumsed "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.