سؤال

في C++, مكتبة ثابتة هي مرتبطة في المكتبات الديناميكية B و C.إذا فئة فو ، يستخدم في التي تم تعريفها في ب ، ج الرابط إذا لم تستخدم فو?

اعتقدت كان الجواب نعم, ولكن أنا الآن الوقوع في مشكلة مع xlc_r7 حيث المكتبة ج يقول فو هو غير معرفة الرمز الذي هو بقدر C المعنية.مشكلتي مع مكتبة C لا تستخدم الطبقة الرجوع فيه.هذه الروابط في Win32 (VC6) و نظام الذاكرة الافتراضية المفتوح.

هذا رابط التناقض أو PBCAK?

معلومات جديدة:

  1. ب يعتمد على C ولكن لا تأشيرة بالعكس.

  2. أنا لا تستخدم /الأراضي الفلسطينية المحتلة:المرجع إلى رابط على ويندوز و الروابط دون قضية.

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

المحلول

عندما ثابت الرابط اثنين من وحدات تصبح واحدة.حتى عند ترجمة ج " و " ارتباط إلى ذلك ، كما لو كنت قد نسخ كافة التعليمات البرمجية المصدر من في التعليمات البرمجية المصدر C, ثم جمعت جنبا إلى جنب المصدر.لذلك C.dll يتضمن التي لها تبعية B via فو.سوف تحتاج إلى رابط آخر رابط المكتبة من أجل تلبية تلك التبعية.

علما أنه بحسب المعلومات الخاصة بك, وهذا خلق تبعية دائرية بين B و C.

نصائح أخرى

يبدو انها على الارجح رابط (ld/unix) ، (معظم الإصدارات التي استخدمتها من) ld روابط المكتبات في من اليسار إلى اليمين - و إذا كان هناك إشارة في الأول الذي هو مطلوب من قبل أحد في وقت لاحق المعتاد هو خدعة إلحاق أول مكتبة (أو أي مكتبة) إلى نهاية الأمر.

انها محاولة ونرى....

هو الرابط الخاص بك خط C بما في ذلك تصدير ليب ل ب ؟ إذا كان حتى ذلك الحين كما ريتشارد تشير إلى أنه يبدو وكأنه يأمر شيء.

اقتراح آخر هو أن نرى إذا كان هناك رابط الخيار لتجاهل unreferenced الرموز ، إذا ج لا تحتاج هذه الوظيفة من A.Microsoft رابط هذا يتحقق مع /الأراضي الفلسطينية المحتلة:المرجع التبديل.

السبب الوحيد C لن رابط هو أن المترجم يعتقد أنه لا تحتاج فو الرمز.

منذ ج لا يشير إلى فو الرموز يجب أن يكون هناك سبب آخر رابط الاحتياجات الرمز.

فقط سبب آخر وأنا أعلم من هو تصدير من نوع ما.أنا أعرف فقط من Visual C++, لذا أقترح عليك البحث عن بعض ما يعادلها من __declspec( dllexport ) في معالجة الملفات ، ونرى ما يولد.

وهنا ما أود أن تفعل:يكون المعالج إخراج تخزينها في ملف منفصل و البحث عن أحداثا من فو.أما أنها سوف تحدث التصدير ، أو تم الرجوع إليها بعض الطريق من قبل المترجم.

إذا كان تعريف وظيفة معينة لا يلزم ، ثم أن المكتبة لن تكون مرتبطة خلال ربط المرحلة.في الحالة الخاصة بك ، مثل تعريف فو هي موجودة في المكتبة ب وليس في مكتبة C.وهكذا المكتبة ج لن يتم تحميلها في الذاكرة أثناء تحميل الملف القابل للتنفيذ.

ولكن يبدو أنك تستخدم فو() وظيفة في المكتبة ج كذلك, لأن الذي كنت تحصل على خطأ المقابلة.

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