2010-09-14 20 views
6

Czy ktoś pomyślnie skompilował TCC na OS X?Problemy podczas kompilowania TCC na OS X

Z tego co wiem, powinno być możliwe, ale gdy uruchamiam zrobić pojawia się następujący błąd:

$ 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 działa dobrze i daje następujący wynik:

$ ./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 

Jestem całkiem na pewno problem jest prosty, ale nie skompilowałem wystarczającej ilości programów na OS X, aby zdawać sobie sprawę z problemów ...

Głównym celem instalacji TCC wa s, aby uzyskać libtcc, bym mógł zacząć eksperymentować z dynamicznym generowaniem kodu z Ruby (w przypadku, które robi różnicę: -p)

Dzięki!

+0

Mój MacBook z 10.5 otrzymuje inny błąd niż zgłoszenie. Jaką wersję systemu operacyjnego i jakiego sprzętu używasz? – dmckee

+0

Powyższy błąd wystąpił w 10.6. Budowanie na 10.5 napotyka na rzeczywiste błędy w programie związane z kodem dostępu do rejestru ... –

Odpowiedz

3

Będę konsolidować moje komentarze teraz.

Wygląda na to, że jest kilka problemów.

  1. Nastąpiła zmiana w schemacie nazewnictwa dla dostępu do rejestru x86 w systemie Mac OS 10.5. Zobacz Access EIP and EBP via ucontext on OS X. Będzie to wymagało zhakowania źródła, dopóki opiekun nie zostanie przekonany do obsługi systemu Mac OS X.
  2. Formaty plików wykonywalnych obsługiwane przez tcc nie pokrywają się z tymi, które Mac OS X uruchomi natywnie. Jednak może to rozwiązać adres XBinary. (Nie znalazłem ani pakietu fink, ani pakietu MacPorts, ale nie mam go jeszcze zainstalowanego .Nie wiem, że to zrobię - to jest głęboka magia i teoretycznie może zrobić naprawdę złe rzeczy.) Ah. ... to było już na SO: Possiblity of loading/executing ELF files on OSX.
+1

Dziękuję za odpowiedź! Udało mi się dodać alternatywny kod dostępu do rejestru w OS X i uzyskać kompilację TCC. Jednak drugi problem, który wskazałeś, to zatrzask ... Zostawię go w spokoju, ponieważ byłoby dużo pracy do rozszerzenia TCC o pliki binarne MACH-0. Dzięki za pomoc! –

3

Błędy można naprawić, edytując skrypt konfiguracyjny pakietu TCC (ver 0.9.25).

W skrypcie konfiguracyjnym, wiersz 36 mówi cpu = uname -m Jeśli prowadzisz uname -m w konsoli systemu Mac OS X, drukuje "i386", nawet jeśli jest to system 64-bitowy.

Rozwiązaniem jest komentarz od tej linii, i zastąpienie go cpu = x86_64,

Potem jakieś błędy kompilacji pojawią się z powodu rejestru nazw konwencje w systemie Mac OS X, jak wspomniano przez dmckee w tym wątku .

Moja poprawka jest dodać kilka linijek do libtcc.c wokół linii 1512. Wreszcie będzie wyglądać

#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 

kompiluje wtedy.

27

Spędziłem trochę czasu, próbując uruchomić tcc na osxie. Dołączyłem kilka poprawek, w tym jedną z powyższej odpowiedzi, a teraz wszystkie znajdują się w repozytorium programistycznym pod adresem http://repo.or.cz/w/tinycc.git. Budowanie, niektóre testy i wszystkie przykłady powinny działać.

Nie jestem pewien, czy jesteś świadomy, ale strona http://bellard.org/tcc/ należąca do Fabrice'a Bellarda, który rozpoczął ten projekt, nie jest aktualizowana bardzo regularnie. Głównie dlatego, że nie ma zbyt wielu "oficjalnych" wydań tcc.tcc jest jednym z tych projektów, które w większości żyją z żywych źródeł i aktualizacji. Więc jeśli chcesz spróbować ponownie, przejdź do http://repo.or.cz/w/tinycc.git i zdobądź gałąź "mob" (nie "master"). Aby uzyskać szczegółowe informacje, patrz http://repo.or.cz/w/tinycc.git i dołącz do listy mailingowej, aby się zaangażować.

+0

Zapomniałem wspomnieć, że obecnie tcc na osxie może być używany jako język skryptowy zarówno w powłoce, jak iw aplikacji. Nie jest w stanie tworzyć plików binarnych, które mogą być wykonywane jako niezależne procesy. – mikijov

+1

To jest _very_ cool, dzięki za udostępnienie tego. Jeśli chcesz, aby więcej osób z niego korzystało, możesz podać konkretne instrukcje, jak je zdobyć i zbudować. Nie wszyscy znają git, a konieczność znalezienia gałęzi 'mob' dodaje dodatkową zmarszczkę dla niewtajemniczonych. – Charphacy