سؤال

يتم إنشاء معظم ثنائيات 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 و GnuWin mkdir, ، الاقتباسات تجبر الأخير على استخدامه)

قم بتشغيل 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):

  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) لبناء القاهرة: http://slinavlee.googlepages.com/

تستخدم سلسلة أدوات MSYS+gcc مكتبة وقت التشغيل MSVCRT القديمة (المدمجة الآن في Windows) ويقدم Visual C++ 2005/2008 مكتبته الخاصة.إنها حقيقة معروفة لا ينبغي أن يعتمد هذا الرمز على أوقات تشغيل متعددة.تمرير الأشياء س.مقابض الملفات ومؤشرات الذاكرة وما إلى ذلك.سوف تتأثر، وسوف يسبب حوادث عشوائية على ما يبدو في مثل هذا السيناريو.

لم أتعرض للعض من هذا.ثم مرة أخرى، لم أعد أستهدف Windows حقًا بعد الآن.لكن قيل لي بما فيه الكفاية ألا أحاول حتى تجربة الحل.

ما كان يمكن أن ينجح هو ربط جميع التبعيات بشكل ثابت في lib (على سبيل المثال، كايرومم).ليس للمكتبات الثابتة وقت تشغيل مرتبط بها، أليس كذلك؟لكنني لم أحاول هذا.لقد قمت بالفعل بتشغيل مبنى VC++ الذي يحتوي على جميع المكونات، لكن الأمر استغرق أيامًا.

لم أجد عنوان URL الذي قدمته.غريب في حد ذاته؛أنا بحثت في كل مكان'.ثم مرة أخرى، هذا مخصص لـ Visual Studio 2003.NET، أي أن هناك جيلين متأخرين بالفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top