Problemas en la compilación de TCC en OS X
Pregunta
¿Alguien ha compilado correctamente TCC en OS X?
Por lo que sé que debería ser posible, pero cuando corro hago me sale el siguiente error:
$ 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
funciona muy bien y da el siguiente resultado:
$ ./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
Estoy bastante seguro de que el tema es algo sencillo, pero no he recopilado suficientes programas en OS X para estar al tanto de la pratfalls ...
El propósito principal para la instalación de TCC era conseguir libtcc para que pudiera empezar a experimentar con la generación dinámica de código de Ruby (en caso de que hace una diferencia :-p)
Gracias!
Solución
Voy a consolidar mis comentarios ahora.
Parece que hay varios problemas.
- Se ha producido un cambio en el esquema de nomenclatura para el acceso a registro x86 como de Mac OS 10.5. Ver acceso EIP y EBP través ucontext en OS X . Para ello será necesario cortar la fuente hasta que el desarrollador puede ser convencido para apoyar Mac OS X.
- Los formatos ejecutables apoyado por
tcc
no se superponen con los que Mac OS X se ejecutará de forma nativa. Sin embargo, XBinary puede abordar esta cuestión. (No he encontrado bien un Fink paquete o una paquete DarwinPorts , sin embargo, no lo tiene instalado todavía no estoy seguro de que lo haré -. esto es la magia de profundidad, y en teoría, podría hacer cosas muy malas de hecho .) Ah ... esto ya estaba en lo mismo: Posibilidad de carga / ELF ejecutar archivos en OSX .
Otros consejos
yo acabamos de pasar una cierta hora seria tratando de hacer TCC ejecutar en OSX. He incluido varias correcciones, entre ellos el de la respuesta anterior, y ahora están todos en el repositorio de desarrollo en http://repo.or.cz/w/tinycc.git . La construcción, algunas pruebas y todos los ejemplos debería funcionar.
No estoy seguro de si son conscientes, pero el sitio http://bellard.org/tcc/ que pertenece a Fabrice Bellard que comenzó este proyecto, no se actualiza de forma regular. Sobre todo porque no hay muchas liberaciones 'oficiales' de TCC. TCC es uno de esos proyectos que en su mayoría vive de fuentes en vivo y actualizaciones. Así que si usted quiere dar a esta otra oportunidad, por favor vaya a http://repo.or.cz/ w / tinycc.git y obtener la rama 'mafia' (no 'maestro'). Por favor, vea http://repo.or.cz/w/tinycc.git para más detalles y no unirse a la lista de correo para involucrarse.
Los errores puede ser fijado por editar guión de configuración del paquete de TCC (ver 0.9.25).
En el script de configuración, la línea 36 dice
cpu = uname -m
Si ejecuta uname -m en la consola de Mac OS X, se imprime "i386", incluso si se trata de un sistema de 64 bits.
Una solución es hacer comentarios fuera de esta línea, y sustituirla por la CPU = x86_64,
A continuación, algunos errores de compilación se mostrará debido a las convenciones de nomenclatura de registro en Mac OS X, como se ha mencionado por dmckee en este hilo.
Mi solución es añadir unas pocas líneas a libtcc.c alrededor de la línea 1512. Por último se verá como
#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
Se recoge a continuación.