Probleme bei der Kompilierung TCC auf OS X
Frage
Hat jemand erfolgreich kompiliert TCC auf OS X?
Von dem, was ich weiß, dass es möglich sein soll, aber wenn ich laufe mache ich die folgende Fehlermeldung erhalten:
$ 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
läuft gut und gibt die folgende Ausgabe:
$ ./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
Ich bin ziemlich sicher, dass das Problem ist etwas einfach, aber ich habe nicht genug Programme auf OS X zu beachten Sie die pratfalls ...
kompiliertDer primäre Zweck TCC für die Installation war libtcc zu bekommen, damit ich mit dynamischer Code-Generierung von Ruby (im Fall, der einen Unterschied macht :-P) experimentieren konnte
Danke!
Lösung
Ich werde nun meine Kommentare konsolidieren.
Es scheint einige Probleme zu sein.
- Es hat sich für die x86-Registerzugriff wie von Mac OS 10.5 eine Änderung des Namensschema gewesen. Siehe Zugang EIP und EBP über ucontext auf OS X . Dies wird Hacking die Quelle benötigen, bis der Betreuer überzeugt werden kann Mac OS X zu unterstützen.
- Die ausführbaren Formate unterstützt durch
tcc
nicht überlappen mit denen, dass Mac OS X nativ ausgeführt wird. Allerdings XBinary kann diese Adresse. (Finde ich nicht entweder ein fink Paket oder ein Possiblity von Laden / Ausführen ELF-Dateien auf OSX .
Andere Tipps
Ich habe gerade einige ernsthafte Zeit damit verbracht, auf osx zu machen tcc laufen. Ich habe mehrere Updates enthalten, darunter auch die von der Antwort oben, und jetzt sind sie alle in der Entwicklungs-Repository auf http://repo.or.cz/w/tinycc.git . Der Aufbau, sollten einige Tests und alle Beispiele arbeiten.
Ich bin nicht sicher, ob Sie sich bewusst sind, aber http://bellard.org/tcc/ Website Das gehört zu Fabrice Bellard, die dieses Projekt begann, ist nicht sehr regelmäßig aktualisiert werden. Vor allem, weil es nicht viele ‚offiziellen‘ ist tcc Releases. TCC ist eines jener Projekte, die meist von Live-Quellen und Updates lebt. Also, wenn Sie dies noch einmal versuchen wollen, gehen Sie bitte auf http://repo.or.cz/ w / tinycc.git und erhalten den 'Mob' Zweig (nicht 'Master'). Bitte finden Sie unter http://repo.or.cz/w/tinycc.git für Details und tritt die Mailing-Liste zu beteiligen.
Die Fehler können durch Bearbeiten Configure-Skript von TCC-Paket behoben werden (ver 0.9.25).
In dem Configure-Skript, Zeile 36, sagt
cpu = uname -m
Wenn Sie uname -m in der Konsole von Mac OS X laufen, druckt es "i386", auch wenn es sich um ein 64-Bit-System ist.
Eine Lösung ist diese Zeile Kommentar aus, und ersetzen Sie es mit cpu = x86_64,
Dann werden einige Kompilieren Fehler wegen der Registernamenskonventionen in Mac OS X zeigen, wie durch Dmckee in diesem Thread erwähnt.
Meine Lösung ist, ein paar Zeilen zu libtcc.c um Zeile 1512 hinzuzufügen. Schließlich wird es aussehen
#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
Es kompiliert dann.