سؤال

أحصل على الخطأ التالي في Xcode 3.2.1 على Snow Leopard 10.6.2 كلما حاولت تجميع أي تطبيق iPhone تم إنشاؤه بواسطة AppCelerator Titanium. ومع ذلك ، يظهر خطأ الإنشاء فقط عند تحديد iPhone Simulator في قائمة Architecture ، وإذا قمت بتحديد جهاز iPhone ، فأنا قادر على تشغيل التطبيق على جهازي.

علاوة على ذلك ، يتم تشغيل جهاز iPhone Simulator بنجاح وتنفيذ البرنامج مباشرة من بيئة التيتانيوم التي تستخدم Xcode للبناء.

لماذا يحدث هذا ؟

ld: duplicate symbol _main in Resources/libTitanium.a(main.o) and /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/Objects-normal/i386/main.o collect2: ld returned 1 exit status Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

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

المحلول

لا أستطيع أن أخبرك لماذا يحدث هذا ، لكن يمكنني أن أقترح حلًا بديلًا. عندما علقت على محتويات ملف Main.m بالكامل الذي تم إنشاؤه لمشروع التيتانيوم الخاص بي ، تمكنت من التجميع بنجاح والتشغيل على جهاز المحاكاة. اسمحوا لي أن أعرف ما اذا كان يعمل للكم.

نصائح أخرى

تحقق لمعرفة ما إذا كان لديك إعلانات متعددة للوظيفة الرئيسية في مشروعك.

لقد أمضيت بضع ساعات في محاربة هذا. كان ذلك لأنني كنت أستخدم علامة رابط -ALL_LOAD. إذا كنت تستخدم هذه العلامة للالتفاف حول علة الفئة ، فهناك بعض الحلول الأخرى - انظر هنا.

واجهت مشكلة مماثلة. تم تضمين فئة اختبار الوحدة بطريق الخطأ في بنيتي. إذا بحثت عن مشروعك عن "Main (" ستجد على الأرجح وظائف مكررة.

حدث هذا لي لسببين:

1: Class Class Class C من الفئة B وكلاهما استورد نفس الفصل. إصلاحه عن طريق استيراد الفصل في ملف .m.

2: فئتان لها ثابت مع نفس الاسم (حتى لو تم تعريف الثابت في ملف .M). إصلاحه عن طريق تغيير اسم الثوابت.

واجهت هذه المشكلة لأنني حدد ملفًا على هذا النحو:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
... 
} 

وكان أيضًا ملف main.m:

int main(int argc, char* argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        return retVal;
    }
}

يبدو أن هناك طرقًا متعددة للوصول إلى هذه الحالة. كان منجم مختلفًا. قرأت تلميحًا حيث يمكنك السحب من محدد أحداث .xib إلى تنفيذ .H وحدة تحكم العرض الخاصة بك ، وسوف تقوم بالتواصل تلقائيًا من طرقك. فعلت - التي كانت باردة. بدأت على الفور في الحصول على أخطاء رمز مكررة - والتي لم تكن رائعة.

لم يكن لدي وقت للحفر في عمق الرابط لمعرفة ما حدث. لقد قمت بإنشاء وحدة تحكم عرض جديدة ، ونسخت سياق. xib القديم إلى الرجل الجديد. حذفت القديم .h ، .m و .xib وبنيت وعملت مرة أخرى. غريب جدا ، مضيعة جدا لوقت النفايات.

من الواضح أن هناك بعض الأخطاء مع "الراحة" Xcode.

لقد وجدت أن هذا حدث عندما كان لدي ملف تنفيذ مع وظيفة رئيسية فيه (على سبيل المثال ABC.M) وكان لديه أيضًا آخر main.m. بمجرد أن علقت الوظيفة الرئيسية في abc.m, ، تم تجميع المشروع بنجاح.

استنادًا إلى ما يمكنني قوله من هذه الإجابات الأخرى ، سأحتاج إلى إزالة مجموعة من main أساليب.

لكن للقيام بذلك بسهولة ، أحتاج أولاً إلى إزالة جميع تعليقات GD من ملفاتي لأنها موثقة بجد مع التعليقات في كل سطر آخر تقريبًا

يطابق هذا التعبير العادي جميع التعليقات المتعددة C بما في ذلك تحديداتها وقد تساعدك في رحلتك

/\*((?!\*/).)*\*/

قضيت أكثر من ساعة في البحث عن إجابة صحيحة ولكن لا شيء يعمل بالنسبة لي. أخيرًا ، يتم تكرار Xcode الذي يخبرني بشيء ما ، لذا انتقل إلى هذا المجلد بالذات (في هذه الحالة: /users/prithviraj/documents/project/final/build/iphone/build/final.build/debug-iphonesimulator/final.build/ الكائنات-Normal/i386/main.o) وحذف جميع الملفات وأيضًا تحقق من مشروعك ما إذا كان يتم الإعلان عن تلك الفئة/الواجهة المعينة مرتين إذا كانت الإجابة بنعم.

بعد حذف تنظيف وتشغيل المشروع.

لقد عملت بالنسبة لي آمل أن يساعد هذا (-_-).

حذف /Users/{username}/Library/Developer/Xcode/DerivedData مجلد وبناء مرة أخرى.

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