سؤال

ممكن مكررة:
ما هو خطأ غير محدد / غير محدد خطأ رمز خارجي لم يتم حلها وكيف يمكنني إصلاحه؟

أنا أعمل على إفتام عدد كبير من ملفات .h و .lib من Native C ++ إلى C ++ المدارة C ++ للاستخدام النهائي كإجراء مرجعي في C #.

لدي ملفات .lib المرتبطة بها وكل شيء يسير بسلاسة حتى الآن. عند التفاف أحدث ملف .h، اضغط على عقبة عندما عادت 2 وظائف مع خطأ الرابط:

error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function
"public: void __thiscall Field::setCharacter(unsigned char,int)"
(?setCharacter@Field@@QAEXEH@Z) myutils.lib 

لقد تمت الإشارة إليها myutils.lib في خيارات رابط، لذلك لا ينبغي أن يكون المشكلة.

ما الأمر الغريب هو أن لدي حوالي 20 وظيفة في هذا الملف .h كل واحد وجميع الباقي يربط بشكل جيد باستثناء 3 وظائف.

أيه أفكار؟

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

المحلول

الرمز المفقود هو __imp__htonl@4, ، ما هو اسم مشطري C ++ ل Htonl، وهو وظيفة تقوم بتحويل قيمة طويلة من المضيف إلى ترتيب الشبكة. يستخدم @ 4 لتخفيف معلمات المدخلات وهو جزء من دعم C ++ لوظائف مثقلة للسماح لربد الرابط بحل تصادمات اسم W / O.

تأكد من أنك مرتبط بمكتبة الشبكة التي تقوم بالإشارة إلى هذا الرمز من. يفترض أن الحزمة الخاصة بك تستخدم بعض التعريف الخاص لهذا الرمز، بدلا من الماكرو الذي عادة ما يكون.

نصائح أخرى

هل أنت متأكد من تطابق التوقيعات؟ تأكد من التحقق من التوقيع و NESS و Const-Ness. أيضا، تأكد من عدم إبزيم الوظائف.

ركضت في هذا الخطأ عندما قمت بتجميعها مقابل مكتبة ثم غير المكتبة قبل الارتباط. تأكد من أن رؤوسك هي نفسها التي توفرها مكتبتك (غير مستنسخة من بنية أخرى، إلخ). بالطبع، تأكد من أنك تربط بين WS2_32.lib (-lws2_32 ل Mingw / GCC).

بالإضافة إلى ذلك، إذا كنت تستخدم GCC / MINGW قد ترغب في إلقاء نظرة على هذا: خطأ رابط Mingw: Winsock

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