كيف أقوم بإنشاء ملف .exe مرتبط بشكل ثابت بالكامل باستخدام Visual Studio Express 2005؟

StackOverflow https://stackoverflow.com/questions/37398

  •  09-06-2019
  •  | 
  •  

سؤال

بيئة C++ المفضلة لدي حاليًا هي إصدار Microsoft Visual Studio 2005 Express المجاني والممتاز إلى حد كبير.من وقت لآخر، قمت بإرسال ملفات الإصدار .exe إلى أشخاص آخرين وكانت النتائج مرضية.ولكن مؤخرًا اكتشفت اكتشافًا مزعجًا مفاده أن النتائج الممتعة كانت مبنية على المزيد من الحظ الذي أرغب فيه.محاولة تشغيل أحد هذه البرامج على جهاز XP قديم (عام 2001، لم يتم تحديثه بدقة) لم تعطني شيئًا سوى رسالة سيئة "لا يمكن للنظام تشغيل x.exe" (أو ما شابه ذلك).

كشفت بعض عمليات البحث على Google أنه باستخدام مجموعة الأدوات هذه، يؤدي تحديد الارتباط الثابت إلى إنشاء ملف hello-world.exe بسيط يعتمد فعليًا على ملفات .dll إضافية (msvcm80.dll وما إلى ذلك).لن يسمح نظام تخطيط الإصدار المتقن بشكل لا يصدق (ملفات البيان لأي شخص؟) بتشغيل ملف .exe بدون إصدارات .dll الصحيحة تمامًا.لا أريد أو أحتاج إلى هذه الأشياء، أريد فقط ملف .exe قديم الطراز لا يفعل شيئًا سوى عمليات Win32 ذات القاسم المشترك الأدنى ويعمل على أي نظام تشغيل Win32 قديم.

هل يعرف أحد ما إذا كان من الممكن أن أفعل ما أريد فعله بمجموعة الأدوات الموجودة لدي؟

شكرًا لك.

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

المحلول

بالنسبة لوقت تشغيل C، انتقل إلى إعدادات المشروع، واختر C/C++ ثم "إنشاء التعليمات البرمجية".قم بتغيير إعداد "مكتبة وقت التشغيل" إلى "متعدد مؤشرات الترابط" بدلاً من "ملف dll متعدد مؤشرات الترابط".

إذا كنت تستخدم أي مكتبات أخرى، فقد تحتاج إلى إخبار الرابط بتجاهل CRT المرتبط ديناميكيًا بشكل صريح.

نصائح أخرى

تجربتي في Visual Studio 2010 هي أن هناك تغييرين مطلوبين حتى لا تحتاج إلى ملفات DLL.من صفحة خصائص المشروع (انقر بزر الماوس الأيمن على اسم المشروع في نافذة Solution Explorer):

  1. ضمن خصائص التكوين -> عام، قم بتغيير الحقل "استخدام MFC" إلى "استخدام MFC في مكتبة ثابتة".

  2. ضمن خصائص التكوين -> C/C++ -> إنشاء التعليمات البرمجية، قم بتغيير حقل "مكتبة وقت التشغيل" إلى "متعدد الخيوط (/MT)"

لست متأكدا من سبب الحاجة إلى كليهما.لقد استخدمت هذا لإزالة التبعية على glut32.dll.

أضيفت لاحقا:عند إجراء هذه التغييرات على التكوينات، يجب عليك إجراؤها على "جميع التكوينات" --- يمكنك تحديد ذلك في الجزء العلوي من نافذة الخصائص.إذا قمت بإجراء التغيير على تكوين التصحيح فقط، فلن ينطبق ذلك على تكوين الإصدار، والعكس صحيح.

لقد واجهت نفس مشكلة التبعية وأعلم أيضًا أنه يمكنك تضمين ملفات VS 8.0 DLL (الإصدار فقط!)لا يتم تصحيح الأخطاء! --- ويجب إصدار برنامجك أيضًا) في مجلد بالاسم المناسب، في المجلد الأصلي الذي يحتوي على ملف .exe الخاص بك:

كيف:النشر باستخدام XCopy (MSDN)

لاحظ أيضًا أنه من المؤكد أن الأمور ستسير على نحو خاطئ إذا كنت بحاجة إلى الحصول على تعليمات برمجية C++ وC في نفس ملف exe. المرتبط بشكل ثابت لأنك ستحصل على تعارضات في الروابط لا يمكن حلها إلا عن طريق تجاهل libXXX.lib الصحيح ثم الارتباط ديناميكيًا (DLLs) .

وأخيرًا، مع مجموعة أدوات مختلفة (VC++ 6.0) فإن الأشياء "تعمل فقط"، نظرًا لأن نظام التشغيل Windows 2000 والإصدارات الأحدث مثبت عليها مكتبات الارتباط الحيوي (DLL) الصحيحة.

فيما يتعلق باستجابة جاريد، فإن وجود نظام التشغيل Windows 2000 أو إصدار أحدث لن يؤدي بالضرورة إلى حل المشكلة المطروحة.لقد نجحت استجابة Rob، ولكن من الممكن أن يؤدي هذا الإصلاح إلى حدوث مشكلات أمنية، حيث لن تتمكن تحديثات Windows من تصحيح التطبيقات التي تم إنشاؤها على هذا النحو.

في منشور آخر، يقترح Nick Guerrera تعبئة Visual C++ Runtime Redistributable مع تطبيقاتك، والتي يتم تثبيتها بسرعة، وهي مستقلة عن Visual Studio.

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