8

OS XでTCCを正常にコンパイルした人はいますか?

私が知っていることから、それは可能であるはずですが、makeを実行すると、次のエラーが発生します。

$ 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正常に実行され、次の出力が得られます。

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

問題は単純なものだと確信していますが、OS Xで、落とし穴を認識するのに十分なプログラムをコンパイルしていません...

TCCをインストールする主な目的は、libtccを取得して、Rubyからの動的コード生成の実験を開始できるようにすることでした(違いが生じる場合:-p)

ありがとう!

4

3 に答える 3

28

私は osx で tcc を実行するためにかなりの時間を費やしました。上記の回答からのものを含め、いくつかの修正を含めました。現在、それらはすべてhttp://repo.or.cz/w/tinycc.gitの開発リポジトリにあります。ビルド、いくつかのテスト、およびすべての例が機能するはずです。

ご存じかどうかわかりませんが、このプロジェクトを始めた Fabrice Bellard が所有するhttp://bellard.org/tcc/サイトはあまり定期的に更新されていません。主な理由は、「公式」の tcc リリースがあまりないためです。tcc は、主にライブ ソースと更新に依存しているプロジェクトの 1 つです。したがって、これをもう一度試してみたい場合は、http://repo.or.cz/w/tinycc.gitにアクセスして、('master' ではなく) 'mob' ブランチを取得してください。詳細については、 http://repo.or.cz/w/tinycc.gitを参照してください。参加するには、メーリング リストに参加してください。

于 2012-03-06T19:24:17.030 に答える
4

今からコメントを整理します。

いくつかの問題があるようです。

  1. Mac OS 10.5 以降、x86 レジスタ アクセスの命名方式が変更されました。OS X で ucontext を介して EIP および EBP にアクセスするを参照してください。これには、メンテナが Mac OS X をサポートすることを確信できるまで、ソースをハッキングする必要があります。
  2. でサポートされている実行可能形式はtcc、Mac OS X がネイティブに実行するものと重複しません。ただし、XBinaryはこれに対処する場合があります。(ただし、finkパッケージもMacPortsパッケージも見つけられず、まだインストールしていません。インストールするかどうかはわかりません。これは深い魔法であり、理論的には非常に悪いことをする可能性があります。) ああ。 ..これはすでにSOにもありました:OSXでELFファイルをロード/実行する可能性
于 2010-09-14T21:42:46.993 に答える
3

The errors can be fixed by edit configure script of TCC package (ver 0.9.25).

In the configure script, line 36 says cpu=uname -m If you run uname -m in the console of Mac OS X, it prints "i386" even if it is a 64-bit system.

A solution is to comment off this line, and replace it with cpu=x86_64,

Then some compiling errors will show up because of the register naming conventions in Mac OS X, as mentioned by dmckee in this thread.

My fix is to add a few lines to libtcc.c around line 1512. Finally it will look like

#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

It compiles then.

于 2011-08-17T13:40:58.370 に答える