Problemi di compilazione TCC su OS X
Domanda
Qualcuno ha compilato TCC su OS X?
Da quello che so che dovrebbe essere possibile, ma quando eseguo make ottengo il seguente errore:
$ 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
funziona bene e dà il seguente output:
$ ./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
Sono abbastanza sicuro che il problema è qualcosa di semplice, ma non ho compilato abbastanza programmi su OS X di essere a conoscenza del pratfalls ...
Lo scopo principale per l'installazione di TCC è stato quello di ottenere libtcc così ho potuto iniziare a sperimentare con la generazione dinamica di codice da Ruby (in caso che fa la differenza :-p)
Grazie!
Soluzione
Io consolidare i miei commenti ora.
Sembra che ci siano diverse questioni.
- C'è stato un cambiamento nello schema di denominazione per l'accesso registro x86 come di Mac OS 10.5. Vedere accesso EIP e EBP via ucontext su OS X . Ciò richiederà l'hacking della sorgente fino a quando il manutentore può essere convinto a supportare Mac OS X.
- I formati eseguibili supportato da
tcc
non si sovrappongono con quelli che Mac OS X verrà eseguito in modo nativo. Tuttavia, XBinary possono affrontare questo. (Non ho trovato neanche un fink pacchetto o un pacchetto MacPorts , comunque e non ce l'ho installato ma non sono sicuro che lo farò -. questa è magia profonda, e potrebbe in teoria fare cose molto cattive davvero .) Ah ... questo era già su SO troppo: possibilita` di carico / l'esecuzione di file ELF su OSX .
Altri suggerimenti
Ho appena trascorso un certo tempo serio cercando di fare TCC girare su OSX. Ho incluso diverse correzioni, tra cui quello della risposta di cui sopra, e ora sono tutti nel repository sviluppo presso http://repo.or.cz/w/tinycc.git . Costruire, alcuni test e tutti gli esempi dovrebbe funzionare.
Non sono sicuro se si è consapevoli, ma il sito http://bellard.org/tcc/ che appartiene a Fabrice Bellard che ha iniziato questo progetto, non viene aggiornato regolarmente. Soprattutto perché non ci sono molte versioni 'ufficiali' TCC. TCC è uno di quei progetti che vive per lo più fuori di sorgenti live e aggiornamenti. Quindi, se si vuole dare a questo un altro tentativo, visita la pagina http://repo.or.cz/ w / tinycc.git e ottenere il ramo 'mafia' (non 'master'). Si prega di consultare http://repo.or.cz/w/tinycc.git per i dettagli , e non iscriversi alla mailing list per essere coinvolti.
Gli errori può essere risolto modificare script di configurazione del pacchetto di TCC (ver 0.9.25).
Nel script di configurazione, linea 36 dice
cpu = uname -m
Se si esegue uname -m nella console di Mac OS X, viene stampato "i386", anche se si tratta di un sistema a 64 bit.
Una soluzione è quella di commentare fuori questa linea, e sostituirlo con cpu = x86_64,
Poi alcuni errori compilando apparirà a causa delle convenzioni registro di denominazione in Mac OS X, come detto da dmckee in questo thread.
La mia soluzione è quella di aggiungere alcune righe a libtcc.c attorno alla riga 1512. Infine, sarà simile a
#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
Si compila poi.