2

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

これをグーグルで検索してみましたが、「プロトタイプ」がないためだと言う人もいれば、ヘッダーインクルードが何度か行われているためだと言う人もいますが、実際にはそれらのどれも見つかりません。

影響を受けるthread.c:202の行は次のようになります。

EXTERN bool neko_thread_register( bool t ) {

そして、neko_vm.h:37の影響を受ける行は次のようになります。

EXTERN bool neko_thread_register( bool t );

それらの1つが他の実装であることを除けば、それらに違いは見られません。

私が使用しているコンパイラコマンドは次のとおりです。

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 のコードのミラーは、ここにあります。

ありがとう!

4

3 に答える 3

1

そのファイルだけをコンパイルして前処理版を出力してみましたか?スコープ マクロまたはリンケージ マクロがヘッダー ファイルと実装ファイルの間のどこかで変更されている可能性があります。これは、通常はシステム ヘッダーによって定義されるマクロである「bool」タイプにも当てはまる可能性があります。

GCC 4.2 docs here によると、上記のコンパイル行に -E フラグを追加する必要があり、正しい拡張子のファイルが作成されるように変更-o vm/threads.oする-o vm/threads.i必要があります (.i は本質的に「前処理されたファイル」を意味します)。

于 2009-05-16T23:43:12.767 に答える
1

まず、これを C++ ではなく C としてコンパイルしてください。

第 2 に、コードを見なければ、何が問題なのかを判断することはほとんど不可能です。ただし、エラー メッセージを読むと役立つことがよくあります (ググる前でも)。

どうやらneko_thread_registerは 2 回 (threads.c:202 で 1 回、neko_vm.h:37 で 1 回) 宣言されており、2 つの宣言は異なる (競合する) 型を持っています。2 つの宣言を見てください。それらに問題が見られない場合は、コードを示してください。

少なくとも、この 2 行のコードを確認する必要があります。ほとんどの場合、型は typedef やマクロなどであり、それらが定義されている場所も確認する必要があります。

コードを確認せずにできることは、コンパイラ エラーを繰り返すことだけです。"neko_thread_registerには、指定された行に 2 つの矛盾する定義があります。"

于 2009-05-16T16:50:29.750 に答える
0

この行のコメントを外しましたか:

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

メイクファイルで?

于 2009-05-16T17:57:09.573 に答える