Как скомпилировать Cairo для Visual С++ 2008 (Express Edition)
Большинство предварительно скомпилированных двоичных файлов Windows создаются с помощью инструментальных средств MSYS + gcc. Он использует среду выполнения MSVCRT, которая несовместима с Visual С++ 2005/2008.
Итак, как сходить и скомпилировать Cairo 1.6.4 (или новее) только для Visual С++. Включая зависимости (png, zlib, pixman).
Ответы
Ответ 1
Вот инструкции по созданию Cairo/Cairomm с Visual С++.
Требуется:
- Visual С++ 2008 Express SP1 (теперь включает SDK)
- MSYS 1.0
Чтобы использовать инструменты командной строки VС++, необходимо запустить командный файл '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
Компилятор VС++ 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 имеют Makefile для компилятора командной строки Visual С++ (cl),
но они используют Gnu makefile и Unix-подобные инструменты (sed и т.д.). Это означает, что мы имеем
для запуска make из MSYS.
Откройте командную строку с включенными инструментами командной строки VС++ (попробуйте 'cl/?').
Поверните эту командную строку в приглашении MSYS с помощью "C:\MSYS\1.0\MSYS.BAT".
НЕ ИСПОЛЬЗУЙТЕ значок MSYS, потому что тогда ваша подсказка теперь узнает о VС++.
Вы не можете запускать .bat файлы из MSYS.
Попробуйте использовать инструменты VС++ здесь: 'cl -?'
Попробуйте сделать 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 с поддержкой VС++ для компиляции также 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 (API С++)
Загрузить (и извлечь) cairomm-1.6.4.tar.gz из http://www.cairographics.org/releases/
Существует проект Visual С++ 2005, который мы можем использовать (через open и upgrade) в течение 2008 года.
cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj
Изменения, которые необходимо выполнить:
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
Ответ 2
Эти шаги могут построить последний 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
Извлечь
Извлеките эти архивы и переименуйте каталоги:
. (my_cairo_build_root)
├─cairo
├─libpng
├─pixman
└─zlib
Zlib
Не создавайте. В сборке script используется MSVCRT, который сталкивается с Visual Studio 2015. Используйте сгенерированный lib из сборки libpng.
Libpng
Изменить libpng\projects\vstudio\zlib.props
:
- in
<ZLibSrcDir>
удалите номер версии: ..\..\..\..\zlib
- в
<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
builtin mkdir
и GnuWin mkdir
, кавычки заставляют последний использовать)
Запустите Visual Basic для 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
:
Изменить cairo\build\Makefile.win32.features-h
:
- Замените все
@echo
на @"echo"
В GnuWin есть непригодный link.exe
. Переименуйте C:\GnuWin\bin\link.exe
в link_.exe
, чтобы избежать столкновения.
Запустите Visual Basic для 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
Ответ 3
Инструкции, похоже, не работают с текущей версией imlib, интересно, стоит ли заново задавать этот вопрос?
Ответ 4
Вы проверили здесь: http://cairographics.org/visualstudio/? Что вы подразумеваете "Использует MSCVRT runtime, что несовместимо с Visual С++ 2005/2008"? Каковы конкретные проблемы, с которыми вы сталкиваетесь?
Ответ 5
Я столкнулся с двумя проблемами при создании на Windows (Visual Studio 2008, GNU Make 3.81):
-
Неверные "if" конструкции в файлах src/Makefile.sources. Исправлено использование
sed "s/^if \([A-Z_]*\)$/ifeq ($(\1), 1)/" src\Makefile.sources
-
_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).
Ответ 6
MSYS + gcc toolchain использует старую библиотеку времени исполнения MSVCRT (теперь встроенную в Windows), а Visual С++ 2005/2008 приносит свои собственные. Это известный факт, что код не должен зависеть от нескольких режимов работы. Передача вещей с .a. файловые дескрипторы, указатели на память и т.д. будут затронуты и будут приводить к случайным сбоям в таком сценарии.
Я не был упущен этим. Опять же, я больше не нацелен на Windows. Но мне сказали достаточно, чтобы даже не попробовать решение.
Что могло бы сработать, связывает все зависимости статически в lib (скажем, Cairomm). У статических библиотек нет привязки к ним, не так ли? Но я не пробовал это. Я фактически получил VС++ здание всех ингредиентов для работы, но потребовалось несколько дней.
Я не нашел URL, который вы указали. Странный сам по себе; Я смотрел "везде". Опять же, это для Visual Studio 2003.NET, поэтому уже есть два поколения.
Ответ 7
Я сделал это, но у меня нет готовых письменных инструкций. Мои сборки также минимальны, так как мне не нужна поддержка, например. PNG и SVG, я просто использовал его для рендеринга созданной векторной графики для буферов памяти.
Но то, что я сделал, было прочитано через config.h
и другие файлы для системы сборки UNIX/GNU и написано мое собственное приложение для MSVC, а затем создало проект с соответствующими исходными файлами. Вероятно, для этого нужно всего несколько часов, но когда вы закончите, это просто работает;)
Изменить: см. эту страницу, у нее есть проект MSVC 2003 (7.1) для создания cairo: http://slinavlee.googlepages.com/