Как скомпилировать Cairo для Visual C ++ 2008 (Express edition) - PullRequest
11 голосов
/ 17 сентября 2008

Большинство предварительно скомпилированных двоичных файлов Windows создаются с помощью набора инструментов MSYS + gcc. Он использует среду выполнения MSVCRT, которая несовместима с Visual C ++ 2005/2008.

Итак, как пойти и скомпилировать Cairo 1.6.4 (или более позднюю версию) только для Visual C ++. Включая зависимости (png, zlib, pixman).

Ответы [ 7 ]

18 голосов
/ 19 сентября 2008

Вот инструкции по сборке Cairo / Cairomm с Visual C ++.

Требуется:

  • Visual C ++ 2008 Express SP1 (теперь включает SDK)
  • MSYS 1,0

Чтобы использовать инструменты командной строки VC ++, необходимо запустить командный файл 'vcvars32.bat'.

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

ZLib

Загрузить (и извлечь) zlib123.zip из 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

Скачать (и извлечь) lpng1231.zip из http://www.libpng.org/pub/png/libpng.html

Компилятор VC ++ 9.0 выдает множество предупреждений «это может быть небезопасно». Игнорируй их; это паника безопасности MS (код хороший).

    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 является частью Каира, но отдельная загрузка.

Скачать (и извлечь) pixman-0.12.0.tar.gz из http://www.cairographics.org/releases/

Используйте MSYS для распаковки через 'tar -xvzf pixman * .tar.gz'

У Pixman и Cairo есть Makefiles для компилятора командной строки Visual C ++ (cl), но они используют Gnu makefile и Unix-подобные инструменты (sed и т. д.). Это означает, что мы имеем запустить make из MSYS.

Откройте командную строку с включенными инструментами командной строки VC ++ (попробуйте 'cl /?'). Превратите эту командную строку в приглашение MSYS, указав «C: \ MSYS \ 1.0 \ MSYS.BAT».

НЕ используйте значок MSYS, потому что тогда ваша подсказка теперь будет знать о VC ++. Вы не можете запустить .bat файлы из MSYS.

Попробуйте, чтобы инструменты VC ++ работали здесь: 'cl -?'

Попробуйте, чтобы Gnu make также работал: 'make -v'.

Cool.

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

По умолчанию используется оптимизация MMX и SSE2, требующая нового Процессор x86 (Pentium 4 или Pentium M или выше: http://fi.wikipedia.org/wiki/SSE2)

Есть несколько предупреждений, но, похоже, все получится.

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

Оставайтесь в приглашении MSYS VC ++ для компиляции также Cairo.

каир

Скачать (и извлечь) cairo-1.6.4.tar.gz из http://www.cairographics.org/releases/

    cd 
    cd cairo-1.6.4

Makefile.win32 здесь почти хорош, но имеет проводной путь Pixman.

Используйте измененный файл 'Makefile-cairo.win32':

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

(написать все в одной строке, игнорируя обратную косую черту)

Там написано "нет правила для создания 'src / cairo-features.h'. Используйте подготовленное вручную (в Каире> 1.6.4 может существовать «src / cairo-features-win32.h», который вы можете просто переименуйте):

    cp ../cairo-features.h src/

Повторите команду make (стрелка вверх запоминает ее).

    ls src/release
        #
        # cairo-static.lib

cairomm (C ++ API)

Скачать (и извлечь) cairomm-1.6.4.tar.gz из http://www.cairographics.org/releases/

Существует проект Visual C ++ 2005, который мы можем использовать (через open & upgrade) на 2008 год.

    cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

Изменения, которые необходимо сделать:

  • Изменить активную конфигурацию на «Отпустить»

  • Свойства Cairomm-1.0 (с контекстным меню)

        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
  • Оптимизация: быстрый код FPU
            C++/Code generation/Floating point model
                Fast

Щелкните правой кнопкой мыши на 'cairomm-1.0' и 'build'. Есть несколько предупреждений.

    dir cairomm-1.6.4\MSVC_Net2005\cairomm\Release
        #
        # cairomm-1.0.lib
        # cairomm-1.0.dll
        # cairomm.def
3 голосов
/ 15 ноября 2015

Эти шаги помогут собрать последнюю версию cairo 2015-11-15 для сообщества Visual Studio 2015. Отладочная сборка - это DLL, связанная с DLL-версией CRT. Сборка релиза представляет собой статическую библиотеку, ссылающуюся на версию CRT со статической связью и не требующую DLL.

Установить GnuWin

Для сценариев сборки требуются инструменты командной строки GNU. Следующие шаги протестированы с GnuWin от Chocolatey . MSYS также может работать.

Скачать

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

Extract

Извлеките эти архивы и переименуйте каталоги:

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

Zlib

Не строить. Скрипт сборки использует MSVCRT, который конфликтует с Visual Studio 2015. Используйте сгенерированную библиотеку lib из сборки libpng.

Libpng

Редактировать libpng\projects\vstudio\zlib.props:

  • в <ZLibSrcDir> удалить номер версии: ..\..\..\..\zlib
  • in <WindowsSDKDesktopARMSupport> изменить true на false

Откройте libpng\projects\vstudio\vstudio.sln в Visual Studio и подтвердите обновление. Используйте конфигурацию Debug по умолчанию и щелкните правой кнопкой мыши проект libpng для сборки. Переключитесь на Release Library конфигурацию и щелкните правой кнопкой мыши проект libpng для сборки.

pixman

Редактировать pixman\Makefile.win32.common:

  • Заменить CFG_CFLAGS = -MD -O2 на CFG_CFLAGS = -MT -O2 (ссылка на версию CRT со статической связью в сборке выпуска)
  • Заменить @mkdir на @"mkdir" (есть встроенные cmd mkdir и mkdir GnuWin, кавычки заставляют использовать последний)

Запуск собственной командной строки Visual Studio x86 из меню «Пуск»:

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

каир

Редактировать cairo\build\Makefile.win32.common:

  • Заменить CFG_CFLAGS = -MD -O2 на CFG_CFLAGS = -MT -O2
  • Заменить CAIRO_LIBS += $(LIBPNG_PATH)/libpng.lib на CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/libpng16.lib. Теперь скопируйте каталог libpng\projects\vstudio\Debug в (созданный) libpng\lib\ и переименуйте его в debug. Скопируйте каталог libpng\projects\vstudio\Release Library в libpng\lib\ и переименуйте его в release.
  • Заменить CAIRO_LIBS += $(ZLIB_PATH)/zdll.lib на CAIRO_LIBS += $(LIBPNG_PATH)/lib/$(CFG)/zlib.lib
  • Есть две @mkdir -p $(CFG)/`dirname $<` строки. Замените их обоих на:

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

Редактировать cairo\build\Makefile.win32.features-h:

  • Заменить все @echo на @"echo"

В GnuWin есть непригодный link.exe. Переименуйте C:\GnuWin\bin\link.exe в link_.exe, чтобы избежать столкновения.

Запуск собственной командной строки Visual Studio x86 из меню «Пуск»:

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

Последние две команды покажут "Built successfully!", но вернут ошибку. Игнорировать их.

Переименовать обратно C:\GnuWin\bin\link.exe.

Настройка Visual Studio

Создайте каталог include и скопируйте следующие заголовки в:

  • cairo\cairo-version.h (не cairo\src\cairo-version.h)
  • cairo\src\*.h, исключая cairo\src\cairo-version.h

Добавьте этот каталог для включения пути в Visual Studio.

Добавьте cairo\src\$(Configuration) и libpng\lib\$(Configuration) к пути к библиотеке. $(Configuration) автоматически расширится до Debug или Release при сборке.

Поместите cairo\src\debug\cairo.dll и libpng\lib\debug\libpng16.dll в одну из Windows 'PATH.

Перед #include <cairo.h> настройте параметры ссылки:

#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
2 голосов
/ 10 марта 2010

Инструкции, похоже, не работают с текущей версией imlib. Интересно, стоит ли повторять этот вопрос?

1 голос
/ 15 июля 2011

Я столкнулся с двумя проблемами при сборке в Windows (Visual Studio 2008, GNU Make 3.81):

  1. Неправильные конструкции if в src / Makefile.sources. Исправлено это с использованием

    sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
    
  2. _lround недоступно в Windows / MSVC. Обойти это, используя

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

    (что, вероятно, плохо исправлено)

Помимо этих проблем, все отлично работает (для архитектур x86 и x86_64).

1 голос
/ 18 сентября 2008

Вы проверяли здесь: http://cairographics.org/visualstudio/? Что вы имеете в виду «Он использует среду выполнения MSCVRT, которая несовместима с Visual C ++ 2005/2008»? Какие именно у вас проблемы?

0 голосов
/ 18 сентября 2008

Я сделал это, но у меня нет готовых инструкций. Мои сборки также довольно минимальны, так как мне не нужна поддержка, например. Файлы PNG и SVG, я использовал их для рендеринга сгенерированной векторной графики в буферы памяти.

Но я прочитал config.h и другие файлы для системы сборки UNIX / GNU и написал свой собственный, подходящий для MSVC, а затем создал проект с соответствующими исходными файлами. Возможно, в лучшем случае это займет несколько часов, но когда вы закончите, это просто сработает;)

Редактировать: увидеть эту страницу, у нее есть проект MSVC 2003 (7.1) для сборки Каир: http://slinavlee.googlepages.com/

0 голосов
/ 18 сентября 2008

MSYS + gcc toolchain использует старую библиотеку времени выполнения MSVCRT (теперь встроенную в Windows), а Visual C ++ 2005/2008 - свою. Это известный факт , что код не должен зависеть от нескольких сред выполнения. Проходящие вещи с.а. Будут затронуты дескрипторы файлов, указатели памяти и т. д., что приведет к случайным сбоям в таком сценарии.

Я не был обижен этим. Опять же, я больше не ориентируюсь на Windows. Но мне сказали достаточно, чтобы даже не попробовать решение.

Что могло бы сработать, так это статически связать все зависимости в lib (скажем, Cairomm). У статических библиотек нет времени выполнения, не так ли? Но я этого не пробовал. Я на самом деле заставил VC ++ собирать все ингредиенты, но это заняло несколько дней.

Я не нашел URL, который вы даете. Странно само по себе; Я посмотрел «везде». Опять же, это для Visual Studio 2003.NET, так что два поколения уже позади.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...