سؤال

أحاول أن أتعامل مع AIX مع مجمعات XLC/XLC.

يجمع الكود بنجاح عندما يستخدم الإعدادات الافتراضية على جهاز آخر. يجمع الكود بالفعل بنجاح مع الإلغاء ، لكن المشكلة تأتي من الرابط. هذا هو الأمر الذي يربط الكائنات معًا:

$(CHILD_OS)/usr/vacpp/bin/xlC -q32 -qnolib -brtl -o $(EXECUTABLE) $(OBJECT_FILES)   
-L$(CHILD_OS)/usr/lib  
-L$(CHILD_OS)/usr/vacpp/lib/profiled  
-L$(CHILD_OS)/usr/vacpp/lib  
-L$(CHILD_OS)/usr/vac/lib  
-L$(CHILD_OS)/usr/lib  
-lc -lC -lnsl -lpthread  
-F$(CHILD_OS)$(CUSTOM_CONFIG_FILE_LOCATION)

عندما أحاول ربط الكود ، أحصل على العديد من الرموز غير المحددة: .setsockopt (int ، int ، int ، const void*، unsigned long) ، .socket (int ، int ، int) ، .connect (int ، const sockaddr*، غير موقعة طويلة) ، إلخ.

لقد اكتشفت أن الرموز المفقودة هي من مكتبة C القياسية ، Libc.a. عندما بحثت عن الرموز مع NM لـ libc.a التي يتم التقاطها ، توجد الرموز بالفعل. أظن أنه قد تكون هناك مشكلة في عدم قدرة C ++ على قراءة كائنات C ، لكنني حقًا أطلق النار في الظلام.

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

المحلول

يبدو كما لو أنه قد يكون مشكلة millgling اسم C ++.

يجري nm على ملفات الكائن لمعرفة الرموز التي يبحثون عنها. ثم قارن الأسماء الدقيقة ضد المكتبات.

ثم تحقق من أوامر التجميع ، للتأكد من تضمين الإصدار الصحيح من ملفات الرأس - ربما يتضمن نسخة الأصل OS عن طريق الخطأ؟

نصائح أخرى

تمكنت في النهاية من الالتفاف على هذا. يبدو أنني كنت أستخدم برنامج التحويل البرمجي C ++ لملفات .c. باستخدام برنامج التحويل البرمجي XLC بدلاً من برنامج التحويل البرمجي XLC لملفات C التي تم إصلاح هذه المشكلة.

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