مرجع غير محدد للأخطاء في ربط مكتبة C الثابتة بكود C
عند محاولة ربط مكتبة C ثابتة بكود C، يجوز لك مواجهة أخطاء "مرجع غير محدد إلى"، على الرغم من تعديل ترتيب الارتباط. تنشأ هذه المشكلة من اختلاف أسماء الرموز التي تم إنشاؤها بواسطة تجميع C وC والمعروفة باسم 'name mangling'.
في لغة C، يعرض الرابط أسماء الرموز المشوهة في رسائل الخطأ، الأمر الذي قد يكون مربكًا. يكشف فحص ملف الكائن (*.o) باستخدام "nm -u" أن أسماء الرموز المشار إليها لا تتطابق مع تلك الموجودة في المكتبة.
لحل هذه المشكلة، يتم ربط الوظائف كوظائف خارجية تم تجميعها باستخدام يجب أن يكون لمترجم لغة C إعلانات وظائفه محاطة بكتلة "C" خارجية {}". يؤدي هذا إلى منع تشويه اسم C لكل شيء داخل الكتلة.
على سبيل المثال:
extern "C" {
#include
#include
}
بدلاً من ذلك، يمكنك تغليف تعريفات الوظائف في ملفات الرأس كما يلي:
#if defined (__cplusplus)
extern "C" {
#endif
/*
* Put plain C function declarations here ...
*/
#if defined (__cplusplus)
}
#endif
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3