ماك OSX 10.6 مترجم:الحيرة تجربة مع 32 مقابل 64 بت
-
12-09-2019 - |
سؤال
لدي مشكلة في فهم دول مجلس التعاون الخليجي مترجم المقدمة من قبل 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 بت.