首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译Neko VM OS X时出错

编译Neko VM OS X时出错
EN

Stack Overflow用户
提问于 2009-05-16 16:16:17
回答 3查看 374关注 0票数 2

我试图在Mac (10.5.7)上用GCC 4.01编译Neko VM,但我完全卡住了,因为它在编译时停止了,并说:

代码语言:javascript
复制
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中受影响的行如下所示:

代码语言:javascript
复制
EXTERN bool neko_thread_register( bool t ) {

neko_vm.h:37中受影响的代码行如下所示:

代码语言:javascript
复制
EXTERN bool neko_thread_register( bool t );

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

我使用的编译器命令是:

代码语言:javascript
复制
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中找到。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-16 23:43:13

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

根据这里的GCC 4.2文档,您应该需要在上面的编译行中添加-E标志,并且您应该将-o vm/threads.o更改为-o vm/threads.i,以便创建一个具有正确扩展名的文件(.i本质上意味着‘预处理文件’)。

票数 1
EN

Stack Overflow用户

发布于 2009-05-16 16:50:30

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

其次,如果不看代码,就几乎不可能说出问题是什么。但阅读错误消息通常是有帮助的(甚至在你谷歌它们之前):

显然,neko_thread_register声明了两次,一次是在threads.c:202中,另一次是在neko_vm.h:37中,这两个声明的类型不同(冲突)。所以看看这两个声明。如果你看不出它们有什么问题,给我们看一些代码。

至少,查看这两行代码是必要的。最有可能的是,类型是typedefs或宏或类似的东西,然后我们需要看看它们是在哪里定义的。

在没有看到代码的情况下,我们所能做的就是重复编译器错误。在指定的行处,neko_thread_register有两个冲突的定义。

票数 1
EN

Stack Overflow用户

发布于 2009-05-16 17:57:10

您是否取消了此行的注释:

代码语言:javascript
复制
# For OSX
#
# MACOSX = 1   <-- this one

在makefile中?

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

https://stackoverflow.com/questions/872726

复制
相关文章

相似问题

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