سؤال

أحاول إنشاء مكتبة c++ لاستخدامها على windows/MSVC.

مشكلتي هي أنه يبدو أنه من أجل الارتباط بشكل صحيح، أحتاج إلى توزيع مجموعة من الإصدارات المختلفة، المرتبطة بإصدارات مختلفة من أوقات تشغيل MSVC's c++ - مفردة ومتعددة الخيوط، وتصحيح الأخطاء وإصدارها، وإصدارات مترجم مختلفة، والعديد من أدوات الأمان الأخرى خيارات أخرى.

أرغب في توزيع نسختين فقط، 32 بت و64 بت.

فكرتي هي ربما استخدام عامل تشغيل جديد مختلف (على سبيل المثال، mynew) ومخصصات مخصصة لجميع أنواع STL الخاصة بي.عند إنشاء lib، /nodefaultlib.بعد ذلك، عند الارتباط من مشروع أصل، اطلب منهم تحويل mynew إلى new، ومخصص stl الخاص بي إلى المعيار القياسي (أو واحد من اختيارهم).أعتقد أنني سأحتاج إلى إجراء الحذف وبعض الوظائف الأخرى.بطبيعة الحال، سأقدم مثالاً على تطبيق thunking مع المكتبة، ولكن نأمل أن يوفر هذا على الجميع الكثير من الصداع.

هل هذا ممكن؟وقد حاول أي شخص هذا من أي وقت مضى؟هل هناك أفضل الممارسات لإنشاء/توزيع المكتبة على windows/MSVC؟

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

المحلول

وأنت تريد ربط ثابت، كما إجابة عامة.

ملحوظة سريعة على الجواب كريس (لا أريد لنزع دفعة السبب انها في معظمها جيدة، ولكن ...):

لا تصل إلى MSVCRT.DLL (واحد غير معلومة الإصدار)؛ هذا هو-OS محدد النسخة DLL، وإذا كنت تصل إليها، والتطبيق ربما لن يعمل على إصدارات أخرى من Windows. يجب عليك دائما أن ربط MSVCRT ##. دلل، بقدر ما أعرف. وDDK قد تحتوي على ليب لذلك، ولكن لا تصل إلى ذلك إلا إذا كنت حقا تعرف ما تفعلونه.

نصائح أخرى

الارتباط بشكل ثابت بمكتبة وقت تشغيل C++:

  1. فتح خصائص المشروع.
  2. انتقل إلى خصائص التكوين | C/C ++ | قسم توليد الكود.
  3. اضبط مكتبة وقت التشغيل على مؤشرات ترابط متعددة (/MT).

وأنت لا تحتاج إلى استخدام مخصص مخصص إذا كنت تستخدم C ++، وكنت التفاف جميع المخصصات حول std::tr1::shared_ptr (حيث يمكنك تحديد وظيفة إلغاء تخصيص). وهذا يضمن أنه حتى عندما تطلق سراح عملاء المرجع الأخير لمؤشر المشتركة، انها لا تزال متاحة في مكتبتك (أو CRT مكتبتك) أن يحصل على استدعاء عندما يكون الكائن سيفرج عنهم.

وهذا هو أحد السبل لحلها "الجحيم الحدود DLL". نأمل أن يساعد! : -)

وتحرير: أعتقد أنني أخطأت القصد من سؤالك. بدلا من لا يريد أي الاعتماد على CRT لأن كنت قلقا من الجحيم الحدود DLL، أفترض أنك أردت فقط نسخة من DLL الخاص بك والتي يمكنك تثبيتها في أي مكان. في هذه الحالة، يمكنك تقديم وصلة البرنامج لmsvcrt.dll. هذا هو متاح في أي نظام ويندوز.

وأنت لم نسمع هذا من لي، ولكن على ما يبدو في أدوات تطوير برامج تشغيل يمكنك أن تجد نوعا من مكتبة الاستيراد التي تسمح أحدث إصدارات Visual Studio ليرتبط msvcrt.

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