Question

La plupart des fichiers binaires Windows précompilés sont créés avec la chaîne d’outils MSYS + gcc. Il utilise le runtime MSVCRT, incompatible avec Visual C ++ 2005/2008.

Alors, comment compiler Cairo 1.6.4 (ou supérieur) pour Visual C ++ uniquement. Y compris les dépendances (png, zlib, pixman).

Était-ce utile?

La solution

Voici des instructions pour la construction de Cairo / Cairomm avec Visual C ++.

Obligatoire:

  • Visual C ++ 2008 Express SP1 (inclut désormais le Kit de développement logiciel (SDK))
  • MSYS 1.0

Pour utiliser les outils de ligne de commande VC ++, un fichier de commandes 'vcvars32.bat' doit être exécuté.

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

ZLib

Téléchargez (et extrayez) zlib123.zip à partir 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

Téléchargez (et extrayez) lpng1231.zip à partir de http://www.libpng.org /pub/png/libpng.html

Le compilateur VC ++ 9.0 fournit des charges de & "; cela peut être dangereux &"; avertissements. Ignore les; c'est la panique de sécurité de MS (le code est bon).

    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 fait partie du Caire, mais en téléchargement séparé.

Téléchargez (et extrayez) pixman-0.12.0.tar.gz à partir de http: //www.cairographics. org / releases /

Utilisez MSYS pour décompresser via 'tar -xvzf pixman * .tar.gz'

Pixman et Cairo ont tous deux un compilateur en ligne de commande Makefiles for Visual C ++ (cl), mais ils utilisent Gnu makefile et des outils de type Unix (sed, etc.). Cela signifie que nous avons pour lancer la fabrication depuis MSYS.

Ouvrez une invite de commande avec les outils de ligne de commande VC ++ activés (essayez 'cl /?'). Transformez cette invite de commande en une invite MSYS à l'aide de 'C: \ MSYS \ 1.0 \ MSYS.BAT'.

N'UTILISEZ PAS l'icône MSYS, car votre invite saura alors connaître VC ++. Vous ne pouvez pas exécuter de fichiers .bat à partir de MSYS.

Essayez que les outils VC ++ fonctionnent à partir d'ici: 'cl -?'

Essayez que Gnu make fonctionne aussi: 'make -v'.

Cool.

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

Ceci utilise par défaut les optimisations MMX et SSE2, qui nécessitent un nouvel utilisateur. Processeur x86 (Pentium 4 ou Pentium M ou supérieur: http://fi.wikipedia.org/wiki/SSE2 )

Il y a pas mal d'avertissements mais cela semble réussir.

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

Restez dans l'invite MSYS épicée VC ++ pour que Cairo puisse également compiler.

cairo

Téléchargez (et extrayez) cairo-1.6.4.tar.gz à partir de http: //www.cairographics. org / releases /

    cd 
    cd cairo-1.6.4

Le Makefile.win32 ici est presque bon, mais le chemin de Pixman est câblé.

Utilisez le 'Makefile-cairo.win32' modifié:

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

(Écrivez tout sur une seule ligne en ignorant les barres obliques inverses)

Cela dit & "aucune règle pour créer" src / cairo-features.h ". Utilisez celui préparé manuellement (au Caire > 1.6.4, il peut y avoir un 'src / cairo-features-win32.h' que vous pouvez renommer simplement):

    cp ../cairo-features.h src/

Réessayez la commande make (la flèche vers le haut la mémorise).

    ls src/release
        #
        # cairo-static.lib

cairomm (API C ++)

Téléchargez (et extrayez) cairomm-1.6.4.tar.gz à partir de http: //www.cairographics. org / releases /

Il existe un projet Visual C ++ 2005 que nous pouvons utiliser (via open & et upgrade) pour 2008.

    cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

Modifications à apporter:

  • Modifiez la configuration active en ". Libérez "

  • .
  • Propriétés de Cairomm-1.0 (avec menu contextuel)

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

Cliquez avec le bouton droit sur 'cairomm-1.0' et 'build'. Il y a des avertissements.

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

Autres conseils

Ces étapes permettent de créer le dernier cairo le 2015-11-15 pour la communauté Visual Studio 2015. La version de débogage est une DLL reliant la version DLL de CRT. La version de construction est une bibliothèque statique, liant à la version de lien statique de CRT et ne nécessitant aucune DLL.

Installer GnuWin

Les scripts de construction nécessitent des outils de ligne de commande GNU. Les étapes suivantes sont testées avec GnuWin de Chocolatey . MSYS pourrait également fonctionner.

Télécharger

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

Extraire

Extrayez ces archives et renommez les répertoires:

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

zlib

Ne construisez pas. Le script de génération utilise MSVCRT en conflit avec Visual Studio 2015. Utilisez la bibliothèque générée à partir de la compilation de libpng.

libpng

Modifier libpng\projects\vstudio\zlib.props:

  • dans <ZLibSrcDir> supprimer le numéro de version: ..\..\..\..\zlib
  • dans <WindowsSDKDesktopARMSupport> remplacer true par false

Ouvrez libpng\projects\vstudio\vstudio.sln dans Visual Studio et confirmez la mise à niveau. Utilisez la configuration par défaut Debug et cliquez avec le bouton droit de la souris sur le projet libpng pour générer. Basculez vers Release Library configuration et cliquez avec le bouton droit de la souris sur le projet pixman\Makefile.win32.common pour générer.

pixman

Modifier CFG_CFLAGS = -MD -O2:

  • Remplacez CFG_CFLAGS = -MT -O2 par @mkdir (lien vers la version de lien statique de CRT dans la version validée)
  • Remplacez @"mkdir" par cmd (il y a mkdir intégré cairo\build\Makefile.win32.common et GnuWin CAIRO_LIBS += $(LIBPNG_PATH)/libpng.lib, les guillemets forcent l'utilisation de ce dernier)

Exécuter l'invite de commande native Visual Studio x86 à partir du menu Démarrer:

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

le caire

Modifier CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/libpng16.lib:

  • Remplacer libpng\projects\vstudio\Debug par libpng\lib\
  • Remplacez debug par libpng\projects\vstudio\Release Library. Maintenant, copiez le répertoire release dans (créé) CAIRO_LIBS += $(ZLIB_PATH)/zdll.lib et renommez-le en CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/zlib.lib. Copiez le répertoire @mkdir -p $(CFG)/`dirname $<` dans cairo\build\Makefile.win32.features-h et renommez-le @echo.
  • Remplacer @"echo" par link.exe
  • Il y a deux C:\GnuWin\bin\link.exe lignes. Remplacez-les tous les deux par:

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

Modifier link_.exe:

  • Remplacez tout "Built successfully!" par include

Il y a un cairo\cairo-version.h inutilisable dans GnuWin. Renommez cairo\src\cairo-version.h en cairo\src\*.h pour éviter les conflits.

Exécuter l'invite de commande native Visual Studio x86 à partir du menu Démarrer:

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

Les deux dernières commandes affichent cairo\src\$(Configuration) mais renvoient une erreur. Ignorez-les.

Renommer libpng\lib\$(Configuration).

Configurer Visual Studio

Créez un répertoire $(Configuration) et copiez les en-têtes suivants dans:

  • Release (pas cairo\src\debug\cairo.dll)
  • libpng\lib\debug\libpng16.dll, à l'exception de PATH

Ajoutez ce répertoire à inclure le chemin d'accès dans Visual Studio.

Ajoutez #include <cairo.h> et <=> au chemin de la bibliothèque. <=> sera automatiquement étendu à <=> ou <=> lors de la construction.

Placez <=> et <=> dans l'un des Windows <=>.

Avant <=>, configurez les options de lien:

#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

Les instructions ne semblent pas fonctionner avec la version actuelle d’imlib, je me demande s’il vaut la peine de poser cette question?

Avez-vous vérifié ici: http://cairographics.org/visualstudio/ ? Que voulez-vous dire "Il utilise le moteur d'exécution MSCVRT, incompatible avec Visual C ++ 2005/2008"? Quels sont les problèmes exacts que vous rencontrez?

J'ai rencontré deux problèmes lors de la construction sous Windows (Visual Studio 2008, GNU Make 3.81):

  1. Invalid & "if &" construit dans src / Makefile.sources. Correction de l'utilisation de

    sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
    
  2. _lround n'est pas disponible sous Windows / MSVC. Contourné cela en utilisant

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

    (ce qui est probablement une mauvaise solution)

Mis à part ces problèmes, tout fonctionne parfaitement (pour les architectures x86 et x86_64).

Je l'ai fait, mais je n'ai pas d'instructions prêtes à écrire. Mes builds sont également plutôt minimes car je n’ai pas eu besoin de support pour, par exemple. Fichiers PNG et SVG, je viens de l’utiliser pour restituer les images vectorielles générées aux mémoires tampons.

Mais ce que j’ai fait, c’est lu le config.h fichier et les autres fichiers du système de construction UNIX / GNU, écrire mon propre fichier adapté à MSVC, puis créer un projet avec les fichiers source appropriés. Cela prend probablement au mieux quelques heures pour le faire, mais lorsque vous avez terminé, cela fonctionne:;)

Modifier: consultez cette page. Elle contient un projet MSVC 2003 (7.1) pour la construction du Caire: http: // slinavlee.googlepages.com/

La chaîne d’outils MSYS + gcc utilise l’ancienne bibliothèque d’exécution MSVCRT (désormais intégrée à Windows) et Visual C ++ 2005/2008 apporte la leur. C'est un fait que ce code ne devrait pas dépendre sur plusieurs temps d'exécution. Passant des choses à Les descripteurs de fichiers, les pointeurs de mémoire, etc. seront affectés et provoqueront des plantages apparemment aléatoires dans un tel scénario.

Je n’ai pas été touché par cela. Là encore, je ne cible plus vraiment Windows non plus. Mais on m'a dit assez pour ne même pas essayer la solution.

Ce qui aurait pu fonctionner, c’est de relier toutes les dépendances de manière statique à la bibliothèque (par exemple, Cairomm). Les bibliothèques statiques ne sont pas liées à un runtime, n'est-ce pas? Mais je n'ai pas essayé cela. J'ai en fait utilisé VC ++ pour tous les ingrédients, mais cela a pris des jours.

Je n'ai pas trouvé l'URL que vous avez indiquée. Étrange en soi; J'ai regardé partout'. Là encore, il s’agit de Visual Studio 2003.NET, donc deux générations de retard déjà.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top