سؤال

وأنا أعمل في بيئة لينكس مع C ++، وذلك باستخدام مترجم دول مجلس التعاون الخليجي.

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

وعند بدء كل شيء عملية الإنشاء تجمع دون مشكلة، ولكن يعود مع الخطأ رابط اللعين عند محاولة استخدام مكتبة التعليمات البرمجية المخصصة المضافة حديثا قمنا بإنشائه. لقد كنا الآن من خلال الكم الهائل من التعليمات البرمجية مع غرامة سن المشط يبحثون عن عدم التطابق الهجاء والتحقق من أجل أن يتم تضمين كافة المكتبات في عملية الإنشاء، ودققت أن الملفات التي تم إنشاؤها .O تحتوي على ما نحتاج باستخدام مقالب، و كلها كما وحيث ينبغي أن يكون. لقد اختبرنا أيضا مكتبة على حدة والمشكلة بالتأكيد لا تكمن هناك.

وباختصار، لقد حاول معظم الأشياء التي يجب عليك القيام به عادة في هذه الحالات.

هل هناك أداة لC ++ التي يمكن الكشف عن أخطاء رابط تلقائيا، في سياق مماثل لcppcheck أو جبيرة (كلاهما قمنا بتشغيل دون جدوى) التي يمكن أن تساعد هنا؟

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

المحلول

لا أعرف النظام الأساسي الخاص بك، ولكن قضيت بعض الوقت مع مشاكل رابط في دول مجلس التعاون الخليجي حتى أدركت أن ربط مكتبة ثابتة (.a) يتطلب ترتيب معين، وليس نفس لربط gcc object.o first.a second.a من gcc object.o second.a first.a.

نصائح أخرى

وFWIW (ليس كثيرا) وأنا أحاول أن معالجة هذا النوع من المشكلة باستخدام رابط بعضا كما أنا الحصول على اثنين من منصات مختلفة. إذا كان يمكنك استخدام رابط آخر سوف تجد إما:

وأ) وصلات البرنامج الذي يحول مشكلتك من "فلماذا لا تصل؟ إلى 'ما هي الاختلافات بين الربط، والدوال ربط؟ وهي ليست بالضبط خطوة إلى الأمام، لكن في بعض الأحيان خطوة لجانب واحد يتيح لك وجهة نظر مختلفة يمكنك من خلاله رؤية حل؛

وOR

وب) فشلت في ربط، وفي هذه الحالة رابط آخر قد تعطي المزيد من المعلومات المفيدة حول لماذا فشلت.

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