2012-04-02 47 views
0

私は非常に奇妙な私のコンパイラオプションで起こっていると思う。コンパイル時にclass.cはエラーなしでコンパイルされます。私は.dllを作成しようとすると、しかし、私は多くのエラーを取得:未定義の参照 '_method'

undefined reference to '_method' 

_methodは、私は次のように私のコードをコンパイルclass.c

内の任意の数の方法である:

gcc -c -g -w -I/path to include dir/include -MMD -MP -MF .../class.o.d -o class.o class.c 

リンクの構文は次のとおりです。

gcc -Wl,--add-stdcall-alias -m32 -shared -o dist/libdt.dll class.o 

class.cmin_size前にはアンダースコアがありません

if(min_size){ dsize=min_size; } 

:十分な、未定義の参照の一つは、しかし、それは次のようになり、class.cundefined refence to '_min_size'です。私はこれが私のコンパイル/リンク構文と関係があると確信していますが、私はそれを見ません。どんな助けもありがとう!ありがとう!

PS:NetbeansとCygwinを使用しています。

+1

どのようにmin_sizeを定義しましたか? –

+0

申し訳ありませんが残しました。インクルードされたファイル:class.hタイプはsize_t – redhotspike

+0

ですが、未定義の参照はインクルード/ヘッダファイルとは関係ありません。 –

答えて

0

_は、Windowsでのstdcall呼び出し規約に必要な接頭辞です。コンパイラによって追加されます。

extern size_t min_sizeがある場合は、 、あなたはmin_sizeだけを宣言しました。コンパイラにsize_t min_sizeがどこかにあることを伝えました。定義された。

+0

*額を叩く*笑私は本当にCで錆びています。@nosありがとうございます。あなたはそれを釘付けにしました。 class.cにmin_sizeの定義はありませんでした。良い悲しみ... – redhotspike

0

更新:私が提供したオプションについて何か迷惑をかけることがあったので、もう一度コンパイラのオプションを調べました。私はそれを理解しました。私のclass.hファイルには、#if defined(__STRICT_ANSI__)#if defined(__WIN32__)というステートメントがありました。今後の参考のために

私は今、提供私のコンパイラオプションは、次のとおりです。

gcc -ansi -Wall -Waggregate-return -Wcast-align -Wimplicit -Wmissing-prototypes -Wnested-externs -Wno-parentheses -DFIFO -D__Win32__ -D_NT_SOURCE -c -o class.o class.c 

コンパイラオプションを変更した後、私はもはや未定義の参照についてのすべてのエラーを得ませんでした!私はこれが将来的にいくつかの人々を助けることを願っています。 :)