编译 Neko VM OS X 时出错

问题描述 投票:0回答:3

我正在尝试使用 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

我尝试用谷歌搜索这个,有些人说这是因为缺乏“原型”,有些人说这是因为标头包含已完成多次,但我真的找不到其中任何一个。

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找到。

谢谢!

c macos gcc neko
3个回答
1
投票
您是否尝试过单独编译该文件并输出预处理版本?可能是范围或链接宏在头文件和实现文件之间的某个位置被修改——“bool”类型也是如此,它通常是由系统头定义的宏。

根据此处的 GCC 4.2 文档,您应该需要将 -E 标志添加到上面的编译行,并且您应该将

-o vm/threads.o

 更改为 
-o vm/threads.i
,以便创建具有正确扩展名的文件(.i 表示'预处理文件',本质上)。


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

其次,在没有看到代码的情况下,几乎不可能说出问题是什么。 但阅读错误消息通常很有帮助(甚至在您用谷歌搜索它们之前):

显然

neko_thread_register

 被声明了两次,一次在threads.c:202 中,一次在neko_vm.h:37 中,并且这两个声明具有不同(冲突)的类型。那么看看这两个声明。如果您看不出它们有问题,请向我们展示一些代码。

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

在看不到代码的情况下,我们所能做的就是重复编译器错误。 “

neko_thread_register

 在指定的行中有两个相互冲突的定义。”


0
投票
您取消注释此行了吗:

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

在makefile中?

© www.soinside.com 2019 - 2024. All rights reserved.