AIX XLC Cross-Compilation/Linkage لـ C ++ لا تجد رموز C
-
30-09-2019 - |
سؤال
أحاول أن أتعامل مع 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 التي تم إصلاح هذه المشكلة.