"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل أخطاء \"مرجع غير محدد إلى\" عند ربط مكتبات C الثابتة بكود C++؟

كيفية حل أخطاء \"مرجع غير محدد إلى\" عند ربط مكتبات C الثابتة بكود C++؟

تم النشر بتاريخ 2024-11-08
تصفح:451

How to Resolve \

مرجع غير محدد للأخطاء في ربط مكتبة 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
بيان الافراج أعيد طبع هذه المقالة على: 1729663094 في حالة وجود أي مخالفة، يرجى التواصل مع [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3