سؤال

لقد قمت بتحميل المصدر ل إطلاق وأحاول بنائه في Visual Studio 2005.تم إنشاء مشروع Launchy باستخدام VC7 لذا اضطررت إلى تحديث ملفات المشروع إلى VC8 ويبدو أن هذه العملية تسير على ما يرام.ومع ذلك، يستخدم Launchy أيضًا ملحق يعزز 1.33.1 libs وما قمت بإنشائه هو Boost 1.41.0 libs (دعائم Boost لجعل إنشاء libs الأحدث أسهل بكثير)، لذلك قمت أيضًا بتحديث المشروع للإشارة إلى تثبيت Boost libs الجديد الخاص بي.الآن أحصل على خطأ الرابط التالي:

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib'

لقد ألقيت نظرة على دليل Boost lib وأقرب تطابق يمكنني العثور عليه هو ...

libboost_regex-vc80-mt-gd-1_41.lib

لاحظ المفقودين 's'.لا أفهم ما هو الفرق بين libs، وما إذا كان Visual Studio يبحث عن الشيء الخطأ أم أن عملية إنشاء Boost الخاصة بي فشلت في إنشاء libs الصحيحة.أي شخص يمكن لي نقطة في الاتجاه الصحيح؟

على سبيل التجربة، قمت بإنشاء نسخة من regex lib الذي أملكه وأعدت تسميته إلى ما يبحث عنه الرابط.وهذا يعطيني قائمة طويلة من أخطاء الرابط حول الرموز التي تم تعريفها بالفعل في msvcrtd.lib، مثل ما يلي:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

سأحاول إنشاء Boost 1.33.1 libs وتوجيه ملف مشروع Launchy الخاص بي إلى ذلك بدلاً من ذلك.لكن ما زلت أرغب في معرفة ما هو الخطأ في Boost 1.41.0 libs.

يحرر:لقد وجدت مرجعا في مستندات Boost إلى ما هي libs 's:

استخدم هذه المكتبة عند الارتباط بشكل ثابت بمكتبة C++ القياسية ومكتبات دعم وقت تشغيل المترجم.

لذلك يبدو أن libs 's هي الصحيحة.الآن علي فقط أن أعرف كيفية بنائها.

حل:لقد تمكنت من إنشاء libs المعززة المفقودة باستخدام سطر الأوامر التالي.

bjam --build-type=complete msvc stage

لقد قمت بتشغيل ذلك بعد تشغيل Boostrap.bat بالفعل في الدليل حيث يعيش Boost.

هل كانت مفيدة؟

المحلول

الفرق هو تم وصفه بوضوح في مستندات Boost - "mt-sgd" تعني "تصحيح الأخطاء، مكتبات وقت التشغيل المرتبطة بشكل ثابت، متعددة الخيوط، مع رموز التصحيح"."mt-gd" هو نفسه، ولكن باستخدام مكتبات وقت التشغيل المرتبطة ديناميكيًا (أي.msvcrtd.lib بدلاً من libcmtd.lib).

إما أن تقوم بتغيير إعدادات المشروع لاستخدام ربط CRT الديناميكي (أي/MDd بدلاً من /MTd)، أو أنشئ Boost باستخدام الارتباط الثابت - لن يعمل المزج بينهما بشكل صحيح.

نصائح أخرى

وماذا القيادة التي استخدمتها لبناء دفعة؟ محاولة تحديد بناء من نوع = كاملة. وعادة ما يجب بناء الصورة يبس أيضا.

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