编译Neko VM OS X时出错

时间:2009-05-16 16:16:17

标签: c macos gcc compiler-construction neko

我正在尝试使用GCC 4.01在Mac OS X(10.5.7)上编译Neko VM并且我完全卡住了,因为它在编译时停止了:

vm/threads.c:202: error: conflicting types for 'neko_thread_register'
vm/neko_vm.h:37: error: previous declaration of 'neko_thread_register' was here

我已经尝试使用Google搜索,有些人说这是因为缺少“原型”而有些人说这是因为标题包括多次完成,我无法找到任何这些。

threads.c:202中受影响的行看起来像这样:

EXTERN bool neko_thread_register( bool t ) {

neko_vm.h:37中受影响的行看起来像这样:

EXTERN bool neko_thread_register( bool t );

我看不出它们有什么不同,除了其中一个是另一个的实现。

我正在使用的编译器命令是:

cc -Wall -O3 -v -fPIC -fomit-frame-pointer -I vm -D_GNU_SOURCE -arch i386 -L/usr/local/lib -L/opt/local/lib -I/opt/local/include  -o vm/threads.o -c vm/threads.c

我很欣赏一些关于我可以在这里做什么的想法,我真的不知道从这里可以去哪里。

可以找到我正在尝试编译的Neko代码的镜像here

谢谢!

3 个答案:

答案 0 :(得分:1)

首先,确保将其编译为C,而不是C ++。

其次,没有看到代码,几乎不可能说出问题所在。 但阅读错误消息通常很有帮助(甚至在你谷歌之前):

显然neko_thread_register被声明两次,一次在threads.c:202中,一次在neko_vm.h:37中,两个声明有不同的(冲突的)类型。所以看看这两个声明。如果您看不到它们的问题,请向我们展示一些代码。

至少,看到这两行代码是必要的。很可能,类型是typedef或宏或类似的东西,然后我们需要看看它们的定义位置。

如果没有看到代码,我们所能做的就是重复编译器错误。 “neko_thread_register在指定的行上有两个相互矛盾的定义。”

答案 1 :(得分:1)

您是否尝试过单独编译该文件并输出预处理版本?可能是在头文件和实现文件之间的某处修改了作用域或链接宏 - 对于'bool'类型也是如此,它通常是由系统头定义的宏。

根据这里的GCC 4.2文档,您需要在上面的编译行中添加-E标志,并且您应该将-o vm/threads.o更改为-o vm/threads.i,以便具有正确扩展名的文件是created(.i表示“预处理文件”,基本上是。)

答案 2 :(得分:0)

您是否取消注释这一行:

# For OSX
#
# MACOSX = 1   <-- this one

在makefile中?