سؤال

أنا أستخدم مكتبة من CGAL والتي تنتج خلال مرحلة الارتباط في تجميع التعليمات البرمجية الخاصة بي الكثير من تحذيرات الارتباط لهذا النموذج:

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

كيف يمكنني إيقاف تشغيل تحذير الرابط المحدد ضمن Visual C++/Studio 2008؟

لاحظ أنه ليس لدي أي سيطرة على مكتبة (CGAL) الخارجية التي أستخدمها.لا أستطيع/لا أرغب في إعادة ترجمة المكتبة الخارجية.ومن هنا ضرورة إصلاح الرسائل في نهايتي.

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

المحلول

ويضاف ما يلي كخيار رابط إضافي:

 /ignore:4099

وهذا هو في Properties-> Linker-> سطر الأوامر

نصائح أخرى

تحديث 2018-10-16

وبحسب ما ورد، اعتبارًا من VS 2013، يمكن تعطيل هذا التحذير.شاهد تعليق @Mark Ransom.

الإجابة الأصلية

لا يمكنك تعطيل هذا التحذير المحدد.

وفق جيف تشابيل يتم التعامل مع التحذير 4099 كما لو أنه من المهم جدًا تجاهله، حتى باستخدامه جنبًا إلى جنب مع /wx (والذي قد يتعامل مع التحذيرات على أنها أخطاء ويتجاهل التحذير المحدد في مواقف أخرى)

إليك النص ذو الصلة من الرابط:

ليست تحذيرات لا يمكن تجاهلها تمامًا

بالنسبة لبعض أرقام التحذير، تكون المواصفات في الخيار /ignore هي مقبولة ولكن ليس بالضرورة أن يتم التصرف بناء عليها.في حالة حدوث التحذير بينما الخيار /wx غير نشط، ثم رسالة التحذير لا تزال معروضة، ولكن إذا كان الخيار /wx نشطا، فسيكون التحذير تجاهل.يبدو الأمر كما لو أن التحذير يعتقد أنه مهم بما فيه الكفاية تجاوز محاولة تجاهلها ، ولكن ليس إذا كان المستخدم قد وضع أيضا ارتفاع سعر التحذيرات التي لم يتم تجاهلها.

تتأثر أرقام التحذير التالية:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

و(للسجل وقبل موضوع يختفي في المحافل MSDN) لا يمكنك تعطيل التحذير (على الأقل تحت VS2010) لأنه على قائمة التحذيرات التي لا يمكن تعطيل (حتى و/ wd4099 لا يعمل)، ولكن ما يمكنك القيام به بدلا من ذلك هو التصحيح LINK.EXE (عادة C: قائمة \ ملفات البرنامج (x86) و \ مايكروسوفت البصرية ستوديو 10.0 \ VC \ بن \ LINK.EXE) لإزالته من قال. يبدو وكأنه آلات ثقب الصخور، وأنا أعلم. على الرغم من أنه يعمل.

وعلى سبيل المثال، إذا كنت ترغب في إزالة التحذير عن 4099، LINK.EXE مفتوحة مع محرر عرافة، خط غوتو 15A0 الذي يقرأ 03 10 (endian قليلا عن 4099) واستبدالها FF 00 (التي لا وجود لها. )

ولصالح الآخرين، أود أن أذكر ما فعلته.

نظرًا لأنه لا يمكنك جعل Visual Studio (2010 في حالتي) يتجاهل تحذيرات LNK4204، فقد كان أسلوبي هو منحه ما يريد:ملفات بي دي بي.نظرًا لأنني كنت أستخدم مكتبات مفتوحة المصدر في حالتي، فقد كان لدي كود إنشاء ملفات pdb بالفعل.

ولكن، الافتراضي هو تسمية جميع ملفات PDF بنفس الشيء:vc100.pdb في حالتي.نظرًا لأنك تحتاج إلى ملف .pdb لكل ملف .lib، فإن هذا يخلق مشكلة، خاصة إذا كنت تستخدم شيئًا مثل ImageMagik، الذي ينشئ حوالي 20 ملفًا .lib ثابتًا.لا يمكن أن يكون لديك 20 ملف lib في دليل واحد (يشير رابط التطبيق الخاص بك للارتباط به في المكتبات) وتسمى جميع ملفات .pdb العشرين بنفس الشيء.

كان الحل هو الذهاب وإعادة بناء ملفات المكتبة الثابتة الخاصة بي، وتكوين VS2010 لتسمية ملف .pdb فيما يتعلق بالمشروع.بهذه الطريقة، يحصل كل .lib على .pdb مسمى بشكل مشابه، ويمكنك وضع كافة LIBs وPDBs في دليل واحد ليستخدمه مشروعك.

لذلك بالنسبة لتكوين "Debug"، قمت بتحرير:

الخصائص->خصائص التكوين->C/C++->ملفات الإخراج->اسم ملف قاعدة بيانات البرنامج من

$(IntDir)vc$(PlatformToolsetVersion).pdb

لتكون القيمة التالية:

$(OutDir)vc$(PlatformToolsetVersion)D$(ProjectName).pdb

الآن بدلاً من مكان ما في الدليل الوسيط، تتم كتابة ملفات .pdb إلى دليل الإخراج، حيث تتم أيضًا كتابة ملفات .lib، والأهم من ذلك، يتم تسميتها بلاحقة D+اسم المشروع.وهذا يعني كل مكتبة مشروع ينتج مشروعًا .lib ومشروعًا محددًا .pdb.

أنا الآن قادر على نسخ جميع ملفات الإصدار .lib وملفات debug .lib وملفات debug .pdb في مكان واحد على نظام التطوير الخاص بي، والمشروع الذي يستخدم مكتبة الطرف الثالث هذه في وضع التصحيح، لديه pdb الملفات التي يحتاجها في وضع التصحيح.

وأظن / تجاهل هو خيار VC6 LINK.EXE. لVS2005 وVS2008 على رابط ليس هناك توثيق الخيار / تجاهل المتاحة، ولكن رابط يبدو مجرد تجاهل "تجاهل /: XXX". الخيار، أي خطأ وليس له تأثير

وعادة ما يتم استخدام ملف PDB لتخزين المعلومات التصحيح. ويتسبب هذا التحذير ربما لأنه لم يتم العثور على vc80.pdb ملف عند ربط ملف الكائن الهدف. قراءة دخول MSDN على LNK4099 هنا .

وبدلا من ذلك، يمكنك إيقاف الجيل معلومات التصحيح من خصائص المشروع> رابط> التصحيح> توليد معلومات تصحيح المجال.

وتحرير: لا تستخدم vc80 / سمعية ستوديو 2005، ولكن ستوديو 2008 الإصدارات / vc90 البصرية المكتبة CGAL (ربما <لأ href = "http://pulse.mat.ucsb.edu/projects/luaAV/browser / مساعدة / cgal / ويندوز / GMP / ليب "يختلط =" نوفولو noreferrer "> من <لأ href =" http://pulse.mat.ucsb.edu/projects/luaAV/browser/auxiliary/cgal/ نوافذ "يختلط =" نوفولو noreferrer "> هنا ).

أدوات رابط تحذير LNK4099 :

<اقتباس فقرة>   

ويمكنك أيضا ترجمة مع / Z7، لذلك   لا يحتاج فوسفات لاستخدامها، أو   إزالة الخيار رابط / DEBUG إذا كنت   لم يكن لديك ملفات .pdb للكائنات   كنت تقوم بربط.

لا يمكنك تعطيل تحذير الرابط 4099، كما قال @John Weldon.

يجب عليك إعادة بناء المكتبة مع بعض التغييرات في تكوين المشروع.لديك عدة خيارات:

  • حفظ ملف PDB مع معلومات التصحيح هو نفس المجلد الذي قمت بحفظ ملف .lib فيه.قم بتعيين القيمة "$(OutDir)$(TargetName).pdb" على الخصائص->C/C++->اسم ملف قاعدة بيانات ملفات الإخراج-البرنامج
  • حفظ معلومات التصحيح في ملف .lib.قم بتعيين القيمة "متوافق مع C7 (/ Z7)" على الخصائص->C/C++->عام->تنسيق معلومات التصحيح
  • تعطيل إنشاء معلومات تصحيح الأخطاء لهذه المكتبة.قم بإزالة القيمة من الخصائص->C/C++->عام->تنسيق معلومات التصحيح
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top