Вопрос

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

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

Это было полезно?

Решение

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

Требуемый:

  • Visual C ++ 2008 Express с пакетом обновления 1 (теперь включает 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 security panic (код хороший).

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

Загрузить (и извлечь) pixman-0.12.0.tar.gz с http://www.cairographics.org/releases/

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

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

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

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

Попробуйте, чтобы инструменты VC ++ работали отсюда:-кл...?

Попробуйте, что Gnu make тоже работает:"make -v".

Прохладный.

    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".Используйте подготовленный вручную (в Cairo > 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

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

  • Измените активную конфигурацию на "Release".

  • Свойства 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" и "построить".Есть несколько предупреждений.

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

Другие советы

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

Установить GnuWin

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

Скачать

zlib128.zip, lpng1619.zip, каир-1.14.4.tar.xz, pixman-0.32.8.tar.gz

Извлечь

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

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

zlib

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

libpng

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

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

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

пиксельман

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

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

Запустите встроенную командную строку 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"

Есть непригодный для использования 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 к одному из окон ' 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

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

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

Я столкнулся с двумя проблемами при сборке в 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).

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top