سؤال

تم تجميع أي شخص بنجاح 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)

شكرًا!

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

المحلول

سأدمج تعليقاتي الآن.

يبدو أن هناك العديد من القضايا.

  1. كان هناك تغيير في مخطط التسمية للوصول إلى سجل X86 اعتبارًا من Mac OS 10.5. نرى الوصول إلى EIP و EBP عبر UContext على OS X. سيتطلب ذلك اختراق المصدر حتى يمكن إقناع المشرف بدعم Mac OS X.
  2. التنسيقات القابلة للتنفيذ بدعم من 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

يجمع بعد ذلك.

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