我试图在Mac (10.5.7)上用GCC 4.01编译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中找到。
谢谢!
发布于 2009-05-16 23:43:13
您是否尝试过单独编译该文件并输出预处理后的版本?作用域或链接宏可能在头文件和实现文件之间的某个位置被修改-- 'bool‘类型也可能是这样,它通常是由系统头文件定义的宏。
根据这里的GCC 4.2文档,您应该需要在上面的编译行中添加-E标志,并且您应该将-o vm/threads.o更改为-o vm/threads.i,以便创建一个具有正确扩展名的文件(.i本质上意味着‘预处理文件’)。
发布于 2009-05-16 16:50:30
首先,确保将其编译为C,而不是C++。
其次,如果不看代码,就几乎不可能说出问题是什么。但阅读错误消息通常是有帮助的(甚至在你谷歌它们之前):
显然,neko_thread_register声明了两次,一次是在threads.c:202中,另一次是在neko_vm.h:37中,这两个声明的类型不同(冲突)。所以看看这两个声明。如果你看不出它们有什么问题,给我们看一些代码。
至少,查看这两行代码是必要的。最有可能的是,类型是typedefs或宏或类似的东西,然后我们需要看看它们是在哪里定义的。
在没有看到代码的情况下,我们所能做的就是重复编译器错误。在指定的行处,neko_thread_register有两个冲突的定义。
发布于 2009-05-16 17:57:10
您是否取消了此行的注释:
# For OSX
#
# MACOSX = 1 <-- this one在makefile中?
https://stackoverflow.com/questions/872726
复制相似问题