سؤال
تم تجميع أي شخص بنجاح TCC على OS X؟
من ما أعرف أنه يجب أن يكون ذلك ممكنًا ، لكن عندما أجري ، أحصل على الخطأ التالي:
$ make
gcc -o tcc tcc.c -DTCC_TARGET_I386 -O2 -g -Wall -fno-strict-aliasing -mpreferred-stack- boundary=2 -march=i386 -falign-functions=0 -Wno-pointer-sign -Wno-sign-compare -D_FORTIFY_SOURCE=0 -lm -ldl
tcc.c:1: error: CPU you selected does not support x86-64 instruction set
tcc.c:1: error: CPU you selected does not support x86-64 instruction set
tcc.c:1: error: -mpreferred-stack-boundary=2 is not between 4 and 12
make: *** [tcc] Error 1
./configure
يعمل بشكل جيد ويعطي الإخراج التالي:
$ ./configure
Binary directory /usr/local/bin
TinyCC directory /usr/local/lib/tcc
Library directory /usr/local/lib
Include directory /usr/local/include
Manual directory /usr/local/man
Doc directory /usr/local/share/doc/tcc
Target root prefix
Source path /Users/aaron/Downloads/tcc-0.9.25
C compiler gcc
CPU x86
Big Endian no
gprof enabled no
cross compilers no
use libgcc no
Creating config.mak and config.h
أنا متأكد من أن المشكلة شيء بسيط ، لكنني لم أقم بتجميع ما يكفي من البرامج على OS X لأكون على دراية بـ Pratfalls ...
كان الغرض الأساسي لتثبيت TCC هو الحصول على LIBTCC حتى أتمكن من البدء في تجربة توليد الكود الديناميكي من Ruby (في حالة حدوث فرق: P)
شكرًا!
المحلول
سأدمج تعليقاتي الآن.
يبدو أن هناك العديد من القضايا.
- كان هناك تغيير في مخطط التسمية للوصول إلى سجل X86 اعتبارًا من Mac OS 10.5. نرى الوصول إلى EIP و EBP عبر UContext على OS X. سيتطلب ذلك اختراق المصدر حتى يمكن إقناع المشرف بدعم Mac OS X.
- التنسيقات القابلة للتنفيذ بدعم من
tcc
لا تتداخل مع تلك التي سيتم تشغيل Mac OS X أصليًا. لكن، xbinary قد يعالج هذا. (لم أجد إما أ فينك حزمة أو macports حزمة ، ومع ذلك ، لم يتم تثبيتها بعد. لست متأكدًا من أنني سأفعل-هذا السحر العميق ، ويمكن أن يفعل من الناحية النظرية أشياء سيئة للغاية بالفعل.) آه ... كان هذا بالفعل كذلك: إمكانية تحميل/تنفيذ ملفات ELF على OSX.
نصائح أخرى
لقد قضيت للتو بعض الوقت الجاد في محاولة لجعل TCC يعمل على OSX. لقد قمت بتضمين العديد من الإصلاحات ، بما في ذلك الإجابة من الإجابة أعلاه ، والآن أصبحت جميعها في مستودع التطوير على http://repo.or.cz/w/tinycc.git. بناء وبعض الاختبارات وجميع الأمثلة يجب أن تعمل.
لست متأكدًا مما إذا كنت على علم ، ولكن http://bellard.org/tcc/ الموقع الذي ينتمي إلى Fabrice Bellard الذي بدأ هذا المشروع ، لا يتم تحديثه بانتظام. في الغالب لأنه لا يوجد الكثير من إصدارات TCC "الرسمية". TCC هي واحدة من تلك المشاريع التي تعيش في الغالب من المصادر والتحديثات الحية. لذلك إذا كنت تريد أن تجرب هذه المحاولة الأخرى ، فيرجى الذهاب إلى http://repo.or.cz/w/tinycc.git واحصل على فرع "الغوغاء" (وليس "سيد"). لطفا أنظر http://repo.or.cz/w/tinycc.git للحصول على التفاصيل ، وانضم إلى القائمة البريدية للمشاركة.
يمكن إصلاح الأخطاء عن طريق تحرير تكوين البرنامج النصي لحزمة TCC (VER 0.9.25).
في البرنامج النصي ، يقول السطر 36 CPU =uname -m
إذا قمت بتشغيل Uname -M في وحدة التحكم في Mac OS X ، فإنه يطبع "I386" حتى لو كان نظامًا 64 بت.
الحل هو التعليق على هذا الخط ، واستبداله بوحدة المعالجة المركزية = x86_64 ،
ثم ستظهر بعض أخطاء التجميع بسبب اتفاقيات التسمية في Mac OS X ، كما ذكر DMCKEE في هذا الموضوع.
الإصلاح الخاص بي هو إضافة بضعة أسطر إلى libtcc.c حول السطر 1512. وأخيراً ، سيبدو
#ifdef __DARWIN_UNIX03
*paddr = uc->uc_mcontext->__ss.__rip;
#else
*paddr = uc->uc_mcontext.gregs[REG_RIP];
#endif
return 0;
} else {
#ifdef __DARWIN_UNIX03
fp = uc->uc_mcontext->__ss.__rbp;
#else
fp = uc->uc_mcontext.gregs[REG_RBP];
#endif
يجمع بعد ذلك.