Question

Quelqu'un at-il compilé avec succès TCC sur OS X?

D'après ce que je sais, il devrait être possible, mais quand je lance make je reçois l'erreur suivante:

$ 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 fonctionne bien et donne le résultat suivant:

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

Je suis assez sûr que la question est quelque chose de simple, mais je n'ai pas assez de programmes compilés sur OS X pour être au courant de la pratfalls ...

L'objectif principal de l'installation TCC était d'obtenir libtcc pour que je puisse commencer à expérimenter avec la génération de code dynamique de Ruby (dans le cas qui fait une différence :-p)

Merci!

Était-ce utile?

La solution

Je vais mes commentaires maintenant consolider.

Il semble y avoir plusieurs problèmes.

  1. Il y a eu un changement dans le schéma de nommage pour l'accès au registre x86 à partir de Mac OS 10.5. Voir Accès EIP et EBP via ucontext sur OS X . Cela nécessitera le piratage de la source jusqu'à ce que le mainteneur peut être convaincu de soutenir Mac OS X.
  2. Les formats exécutables pris en charge par tcc ne se chevauchent pas avec ceux que Mac OS X fonctionnent en mode natif. Cependant, XBinary peut résoudre ce problème. (Je ne trouve pas non plus un paquet fink ou Possiblité de chargement / exécution des fichiers ELF sur OSX
  3. .

Autres conseils

Je viens de passer un peu de temps sérieux en essayant de faire fonctionner tcc sur osx. J'ai inclus plusieurs correctifs, y compris celui de la réponse ci-dessus, et maintenant ils sont tous dans le référentiel de développement à http://repo.or.cz/w/tinycc.git . Construire, des tests et tous les exemples devraient fonctionner.

Je ne sais pas si vous êtes au courant, mais http://bellard.org/tcc/ le site qui appartient à Fabrice Bellard qui a commencé ce projet, ne sont pas mis à jour très régulièrement. La plupart du temps, car il n'y a pas beaucoup de presse tcc « officielle ». tcc est l'un de ces projets qui vit la plupart du temps hors des sources et des mises à jour en direct. Donc, si vous voulez donner à cette autre essai, s'il vous plaît aller à http://repo.or.cz/ w / tinycc.git et obtenir la branche 'mob' (pas 'maître'). S'il vous plaît voir http://repo.or.cz/w/tinycc.git pour plus de détails et ne se joindre à la liste de diffusion pour participer.

Les erreurs peut être résolu en modifier le script de configuration du package TCC (ver 0.9.25).

Dans le script de configuration, ligne 36 dit cpu = uname -m Si vous exécutez uname -m dans la console de Mac OS X, il imprime « i386 » même si elle est un système 64 bits.

Une solution est de commenter de cette ligne, et le remplacer par cpu = x86_64,

Alors quelques erreurs de compilation s'affichera en raison des conventions de nommage de registre sous Mac OS X, tel que mentionné par dmckee dans ce fil.

Mon solution est d'ajouter quelques lignes à libtcc.c autour de la ligne 1512. Enfin, il ressemblera

#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

Il compile ensuite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top