首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OS X上编译TCC时出现的问题

在OS X上编译TCC时出现的问题
EN

Stack Overflow用户
提问于 2010-09-15 05:04:57
回答 3查看 7.7K关注 0票数 8

有没有人成功地在OS X上编译了TCC

据我所知,这应该是可能的,但当我运行make时,我得到了以下错误:

代码语言:javascript
复制
$ 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运行正常,并给出以下输出:

代码语言:javascript
复制
$ ./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)

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-15 05:42:47

现在我将总结我的评论。

似乎有几个问题。

  1. 从MacOS10.5开始,x86寄存器访问的命名方案发生了变化。参见Access EIP and EBP via ucontext on OS X。这将需要修改源代码,直到可以说服维护者支持Mac。
  2. tcc支持的可执行文件格式不会与Mac本机运行的格式重叠。但是,XBinary可能会解决这个问题。(我既没有找到fink包,也没有找到MacPorts包,而且还没有安装它。我不确定我会不会--这是一种深奥的魔法,理论上可能会做出非常糟糕的事情。)啊..。这也已经在SO上了:Possiblity of loading/executing ELF files on OSX.
票数 4
EN

Stack Overflow用户

发布于 2012-03-07 03:24:17

我刚刚花了一些时间来尝试让tcc在osx上运行。我已经包含了几个修复,包括上面答案中的一个,现在它们都在http://repo.or.cz/w/tinycc.git的开发存储库中。构建、一些测试和所有示例都应该可以工作。

我不知道你是否知道,但http://bellard.org/tcc/网站,属于法布里斯·贝拉德谁启动了这个项目,是不是经常更新。主要是因为没有太多的“官方”tcc版本。tcc是那些主要依靠实时源代码和更新的项目之一。因此,如果你想再试一次,请转到http://repo.or.cz/w/tinycc.git,找到“mob”分支(而不是“master”)。请查看http://repo.or.cz/w/tinycc.git了解详情,并加入邮件列表参与其中。

票数 28
EN

Stack Overflow用户

发布于 2011-08-17 21:40:58

这些错误可以通过编辑TCC包(0.9.25版)的配置脚本来修复。

在配置脚本中,第36行显示cpu=uname -m如果您在Mac的控制台中运行uname -m,即使它是64位系统,它也会打印"i386“。

一种解决方案是注释掉此行,并将其替换为cpu=x86_64,

然后,由于Mac中的寄存器命名约定,一些编译错误将会出现,正如dmckee在本线程中提到的那样。

我的解决方法是在libtcc.c的1512行周围添加几行代码。最后,它将看起来像

代码语言:javascript
复制
#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

然后它就会编译。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3712902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档