سؤال

لدي مشكلة في فهم دول مجلس التعاون الخليجي مترجم المقدمة من قبل OSX 10.6 سنو ليوبارد, وذلك أساسا بسبب عدم خبرتي مع 64 بت البيئات.

$ cat >foo.c
main() {}
$ gcc foo.c -o foo
$ file foo
foo: Mach-O 64-bit executable x86_64
$ lipo -detailed_info foo
input file foo is not a fat file
Non-fat file: foo is architecture: x86_64

ومع ذلك ، العمارة يعتبر intel i386 نوع (أنا واحد من أحدث معالجات Intel Core2 duo بوك)

$ arch
i386

و المترجم أهداف i686-التفاح-darwin10

$ gcc --version 
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)

بالطبع أنا أريد تجميع 32 بت أحصل على 32 بت قابل للتنفيذ.

$ gcc -m32 foo.c -o foo
$ file foo
foo: Mach-O executable i386

ولكن أنا لا أحصل على الصورة الكبيرة.الإعداد الافتراضي المترجم هو إنتاج x86_64 التنفيذية, حتى لو كان قوس القول لدي 32 بت آلة (لماذا ؟ Core2 هو 64);حتى لو (اعتقد) أنا تشغيل 32 بت النواة ؛ حتى لو كان مترجم استهداف i686-التفاح-داروين منصة.لماذا ؟ كيف يمكن تشغيل ؟ يجب تجميع 64 أو 32 ?

هذا السؤال يرجع إلى محاولة تجميع دول مجلس التعاون الخليجي 4.2.3 على ماك, ولكن أواجه مجموعة من القضايا مع gmp ، مبفر و libiberty الحصول على (في بعض الحالات) جمعت x86_64.يجب تجميع كل x86_64 ?إذا كان الأمر كذلك ، ما هو الهدف (لا i686-التفاح-darwin10 أعتقد)?

شكرا للمساعدة

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

المحلول

افتراضي مترجم على سنو ليوبارد هو gcc4.2, default العمارة x86_64.الطريقة النموذجية لبناء برامج ماك هو بناء عدة أبنية في ممرات منفصلة ، ثم استخدم ليبو الجمع بين النتائج.(يبو فقط بتصنيف واحد قوس ملفات متعددة قوس أو ملف أو شرائط archs من متعدد ملف القوس.ليس له فائدة على واحد قوس الملفات كما يمكنك اكتشافها.)

البت المترجم له علاقة مع أي شيء.يمكنك بناء 32 بت ثنائيات مع 64 بت مترجم ، والعكس بالعكس.(ما هو رأيك هو "الهدف" من المترجم هو في الواقع لتنفيذ الذي هو مختلف.)

البت نواة له علاقة مع أي شيء.يمكنك بناء و تشغيل 64 بت الثنائيات عند تمهيده على 32 بت النواة ، والعكس بالعكس.

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

نصائح أخرى

يحتوي I686-Apple-Darwin10.0.0 على مجلد X86_64 غير مفهوم من قبل معظم إصدارات Autotools. وبعبارة أخرى، أود أن أقول أن مترجم دول مجلس التعاون الخليجي لسوء الحظ، لا شيء أقل من مزحة على الثلج ليوبارد. لماذا ستحزم مكتبات 32 بت و 64 بت في I686-Apple-Darwin10.0.0 أبعد مني.

$ ls /usr/lib/gcc
i686-apple-darwin10 powerpc-apple-darwin10

تحتاج إلى تغيير كل ما تبذلونه من الملفات تكوين الملفات للتعامل مع البحث في * 86-داروين الدلائل ثم تبحث عن مكتبات 64 بت التي أتصورها.

كما هو الحال مع نظامك، يقول Mac Mini My Mini الخاص بي I386، على الرغم من أنه من الواضح استخدام منصة 64 بت، مرة أخرى خطأ آخر منذ موزعة مع أجهزة 64 بت.

$arch
i386

تدعم مجموعة أدوات Apple هياكل متعددة. إذا كنت ترغب في إنشاء ثنائي الدهون يحتوي على رمز X86 و X86_64، فعليك تمرير المعلمات -arch i386 -arch x86_64 إلى دول مجلس التعاون الخليجي. سيقوم برنامج التحويل البرمجي بتجميع التعليمات البرمجية مرتين لكل من المنصات في إحدى المرء.

إضافة -arch i386 -arch x86_64 إلى CFLAGS قد يسمح لك بتجميع GMP و MPFR و Whatnot على أقسام متعددة في إحدى المرء. بناء LibusB بهذه الطريقة عملت بالنسبة لي.

هذه الإجابة مخطئة، ولكن انظر التعليقات أدناه

السؤال الحقيقي هو ... كيف حصلت على نسخة 32 بت من OSX؟ لم أكن أدرك أن الثلج ليوبارد ملك إصدار 32 بت، حيث أن جميع رقائق Intel في Apple هي Core 2 أو Xeon، والتي تدعم بنية X86_64.

أوه، ونمر الثلج يعمل فقط على رقائق Intel.

تحرير: يبدو ليوبارد الثلوج على ما يبدو في وضع 32 بت.

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