كيفية تجميع برنامج القاهرة لـ Visual C++ 2008 (إصدار Express)
-
01-07-2019 - |
سؤال
يتم إنشاء معظم ثنائيات Windows المترجمة مسبقًا باستخدام سلسلة أدوات MSYS+gcc.يستخدم وقت تشغيل MSVCRT، وهو غير متوافق مع Visual C++ 2005/2008.
إذًا، كيفية البدء وتجميع الإصدار 1.6.4 من القاهرة (أو الأحدث) لـ Visual C++ فقط.بما في ذلك التبعيات (png، zlib، pixman).
المحلول
فيما يلي تعليمات لبناء القاهرة/القاهرة باستخدام Visual C++.
مطلوب:
- Visual C++ 2008 Express SP1 (يتضمن الآن SDK)
- مسيس 1.0
لاستخدام أدوات سطر الأوامر VC++، يجب تشغيل الملف الدفعي 'vcvars32.bat'.
C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vcvars32.bat
زليب
قم بتنزيل (واستخراج) 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-0.12.0.tar.gz من http://www.cairographics.org/releases/
استخدم MSYS لإلغاء الحظر عبر "tar -xvzf pixman*.tar.gz"
يحتوي كل من Pixman و القاهرة على MakeFiles لمرجم أوامر أوامر 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 أيضًا:"اصنع -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-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/
أعد محاولة تنفيذ الأمر (السهم لأعلى يتذكره).
ls src/release # # cairo-static.lib
كيرم (C++ API)
تنزيل (واستخراج) cairomm-1.6.4.tar.gz من http://www.cairographics.org/releases/
يوجد مشروع Visual C++ 2005 يمكننا استخدامه (عبر الفتح والترقية) لعام 2008.
cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj
التغييرات التي يجب القيام بها:
تغيير التكوين النشط إلى "الإصدار"
خصائص كايرومم-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
نصائح أخرى
يمكن لهذه الخطوات إنشاء أحدث إصدار بتاريخ 15-11-2015 لمجتمع Visual Studio 2015.بناء التصحيح هو DLL، ويرتبط بإصدار DLL من CRT.إصدار الإصدار عبارة عن مكتبة ثابتة، ترتبط بإصدار الارتباط الثابت لـ CRT ولا تتطلب أي ملفات DLL.
قم بتثبيت برنامج GnuWin
تتطلب نصوص الإنشاء أدوات سطر أوامر GNU.يتم اختبار الخطوات التالية مع GnuWin من 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
زليب
لا تبني.يستخدم البرنامج النصي للإنشاء MSVCRT الذي يتعارض مع Visual Studio 2015.استخدم lib الذي تم إنشاؤه من بناء libpng.
libpng
يحرر libpng\projects\vstudio\zlib.props
:
- في
<ZLibSrcDir>
إزالة رقم الإصدار:..\..\..\..\zlib
- في
<WindowsSDKDesktopARMSupport>
يتغيرtrue
لfalse
يفتح libpng\projects\vstudio\vstudio.sln
في Visual Studio وتأكيد الترقية.استخدم الافتراضي Debug
التكوين، ثم انقر بزر الماوس الأيمن على المشروع libpng
لبناء.التبديل إلى Release Library
التكوين وانقر بزر الماوس الأيمن على المشروع libpng
لبناء.
com.pixman
يحرر pixman\Makefile.win32.common
:
- يستبدل
CFG_CFLAGS = -MD -O2
معCFG_CFLAGS = -MT -O2
(الارتباط بإصدار الارتباط الثابت لـ CRT في إصدار الإصدار) - يستبدل
@mkdir
مع@"mkdir"
(هناكcmd
مدمجmkdir
و GnuWinmkdir
, ، الاقتباسات تجبر الأخير على استخدامه)
قم بتشغيل Visual Studio x86 Native Command Prompt من قائمة البداية:
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 Native Command Prompt من قائمة البداية:
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
.
تكوين فيجوال ستوديو
إنشاء دليل 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):
بنيات "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).
لقد فعلت هذا، ولكن ليس لدي أي تعليمات مكتوبة جاهزة.تصميماتي أيضًا ضئيلة جدًا لأنني لم أكن بحاجة إلى دعم على سبيل المثال.ملفات PNG وSVG، لقد استخدمتها للتو لعرض الرسومات المتجهة التي تم إنشاؤها على مخازن الذاكرة المؤقتة.
ولكن ما فعلته هو قراءة من خلال config.h
والملفات الأخرى لنظام بناء UNIX/GNU واكتب ملفاتي المناسبة لـ MSVC، ثم أنشئ مشروعًا باستخدام الملفات المصدر المناسبة.من المحتمل أن يستغرق الأمر بضع ساعات في أحسن الأحوال للقيام بذلك، ولكن عندما تنتهي منه، سينجح الأمر ;)
يحرر:راجع هذه الصفحة، فهي تحتوي على مشروع MSVC 2003 (7.1) لبناء القاهرة: http://slinavlee.googlepages.com/
تستخدم سلسلة أدوات MSYS+gcc مكتبة وقت التشغيل MSVCRT القديمة (المدمجة الآن في Windows) ويقدم Visual C++ 2005/2008 مكتبته الخاصة.إنها حقيقة معروفة لا ينبغي أن يعتمد هذا الرمز على أوقات تشغيل متعددة.تمرير الأشياء س.مقابض الملفات ومؤشرات الذاكرة وما إلى ذلك.سوف تتأثر، وسوف يسبب حوادث عشوائية على ما يبدو في مثل هذا السيناريو.
لم أتعرض للعض من هذا.ثم مرة أخرى، لم أعد أستهدف Windows حقًا بعد الآن.لكن قيل لي بما فيه الكفاية ألا أحاول حتى تجربة الحل.
ما كان يمكن أن ينجح هو ربط جميع التبعيات بشكل ثابت في lib (على سبيل المثال، كايرومم).ليس للمكتبات الثابتة وقت تشغيل مرتبط بها، أليس كذلك؟لكنني لم أحاول هذا.لقد قمت بالفعل بتشغيل مبنى VC++ الذي يحتوي على جميع المكونات، لكن الأمر استغرق أيامًا.
لم أجد عنوان URL الذي قدمته.غريب في حد ذاته؛أنا بحثت في كل مكان'.ثم مرة أخرى، هذا مخصص لـ Visual Studio 2003.NET، أي أن هناك جيلين متأخرين بالفعل.