2010-09-14 15 views
6

¿Alguien ha compilado con éxito TCC en OS X?Problemas al compilar 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 que el problema es algo simple, pero no he compilado suficientes programas en OS X para estar al tanto de las fallas ...

El propósito principal para instalar TCC wa s para obtener libtcc para que pueda comenzar a experimentar con la generación de código dinámico de Ruby (en caso de que eso marque la diferencia :-p)

¡Gracias!

+0

Mi MacBook running 10.5 recibe un error diferente del que informa. ¿Qué versión del sistema operativo y qué hardware está ejecutando? – dmckee

+0

El error anterior se encontró en 10.6. Sobre la base de 10.5 encuentra errores reales en el programa relacionado con el código de acceso de registro ... –

Respuesta

3

Voy a consolidar mis comentarios ahora.

Parece que hay varios problemas.

  1. Ha habido un cambio en el esquema de nombres para el acceso de registro x86 a partir de Mac OS 10.5. Ver Access EIP and EBP via ucontext on OS X. Esto requerirá piratear la fuente hasta que el mantenedor pueda ser convencido de que sea compatible con Mac OS X.
  2. Los formatos ejecutables soportados por tcc no se superponen con los que Mac OS X ejecutará de forma nativa. Sin embargo, XBinary puede abordar esto. (No encontré ni un paquete fink ni un paquete MacPorts, sin embargo, y aún no lo tengo instalado. No estoy seguro de que lo haga, esto es una magia profunda, y en teoría podría hacer cosas realmente malas). Ah. .. esto ya estaba en SO también: Possiblity of loading/executing ELF files on OSX.
+1

¡Gracias por su respuesta! Pude agregar el código alternativo para el acceso de registro en OS X y obtener TCC para compilar. Sin embargo, el segundo problema que señalaste es el de parar el show ... Lo dejaré en paz, ya que habría mucho trabajo por hacer para extender el TCC para los binarios MACH-0. ¡Gracias por su ayuda! –

3

Los errores pueden corregirse mediante la secuencia de comandos edit configure del paquete 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 al registro convenciones de nombres 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 que 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.

27

Acabo de pasar un tiempo muy serio tratando de hacer que tcc se ejecute en osx. He incluido varias correcciones, incluida la de la respuesta anterior, y ahora están todas en el repositorio de desarrollo en http://repo.or.cz/w/tinycc.git. Construir, algunas pruebas y todos los ejemplos deberían funcionar.

No estoy seguro si es consciente, pero el sitio http://bellard.org/tcc/ que pertenece a Fabrice Bellard que comenzó este proyecto, no se actualiza con mucha frecuencia. Principalmente porque no hay muchos lanzamientos 'oficiales' de tcc.tcc es uno de esos proyectos que en su mayoría vive de fuentes y actualizaciones en vivo. Entonces, si quieres darle otra oportunidad, ve al http://repo.or.cz/w/tinycc.git y obtén la rama 'mob' (no 'master'). Consulte http://repo.or.cz/w/tinycc.git para obtener más información y únase a la lista de correo para participar.

+0

Olvidé mencionar que actualmente tcc on osx se puede usar como lenguaje de scripting tanto en el shell como en la aplicación. No puede crear binarios que se pueden ejecutar como procesos independientes. – mikijov

+1

Esto es _muy_ genial, gracias por hacer que esto esté disponible. Si desea que más personas lo usen, es posible que desee dar instrucciones específicas sobre cómo obtenerlo y compilarlo. No todo el mundo sabe git, y la necesidad de obtener la rama 'mob' agrega una arruga adicional para los no iniciados. – Charphacy