0

我一直在尝试编译syn64k --forExecutor中使用,以运行System's Twilight(我小时候玩的游戏)。我在我的 macbook pro(带有最新 Xcode 和命令行工具的 Lion 10.7.4)上执行此操作。我映射CCgcc -m32解决我遇到的几个问题,但我得到了以下信息:

Making all in native/i386
make[2]: Nothing to be done for `all'.
outgoing=;\
    gcc -m32 -maccumulate-outgoing-args -c -x c /dev/null 2> /dev/null && outgoing=-maccumulate-outgoing-args; \
    gcc -m32 -S -O2 -fomit-frame-pointer  -Wall -static -fno-defer-pop -Wno-unused\ -I./include -I./../include -I. -I../include $outgoing syn68k.c -o ./syn68k.s
syn68k.c: In function ‘s68k_handle_opcode_0x07A3’:
syn68k.c:52968: internal compiler error: in EmitLV_DECL, at llvm-convert.cpp:7475
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
make[2]: *** [syn68k.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1

我去了 URL,它看起来不像是一个真正发布关于 LLVM 的错误报告的地方。我的文件'syn68k.c'在预处理器完成后大约有50k行,所以我真的不认为我可以制作一个可重现的测试用例来显示错误。

原来这个问题已经在 github 项目上(这是唯一列出的问题,哈哈)。MaddTheSane 说发生这种情况是因为 clang 不支持全局寄存器变量(正如我在此处验证的那样)。

我对你输入后编译的工作原理只有基本的了解make,所以有没有办法可以跳过 clang 或类似的东西?你有什么建议?

4

3 回答 3

2

不幸的是,你需要使用 gcc,而不是 llvm-gcc 来编译这个程序。llvm-gcc 的 LLVM 后端不支持全局寄存器变量。切换到 clang 也无济于事,因为同样的原因,它也会阻塞全局寄存器变量。

于 2012-07-06T13:08:53.580 回答
0

如果不需要使用 llvm 的目的,您绝对可以跳过构建 clang。

llvm 使用 cmake 进行配置和生成 makefile。您可以修改 .cmake 文件以创建禁用您不想创建的任何模块的配置。

于 2012-07-05T17:24:10.600 回答
0

http://developer.apple.com/bugreporter绝对是报告针对 Apple 分发的任何编译器的错误的正确位置,即使它可能看起来不像。也就是说,除了clang之外,没有必要针对任何东西提交错误报告。(顺便说一句,测试用例的大小并不重要。)

如果您对 C 语言的了解不足以破解源代码,那么从 macports 或类似的工具中获取更新版本的 gcc 可能值得一试。

于 2012-07-06T08:52:53.247 回答