2017-09-15 8 views
3

プログラムにfloatを使用しない場合は「__fltused」乗算定義されており、リリースは同じ問題リンカ:私は完全な出力は、この(一つだけのエラー)である

SDL2.lib(SDL_stdlib.obj) : error LNK2005: __fltused already defined in LIBCMTD.lib(fltused.obj)` 
に遭遇していないようだのビルド

私は/ MTdと静的ライブラリとしてSDL2.libを再コンパイルしました。それが私のシステム上でそのライブラリの唯一のライブラリであることを保証しました。

それを取得奇妙かかわら:

もちろん、理想的ではないのです
int main(int argc, char * argv[]) { 
    return 0; // will not link 
} 

int main(int argc, char * argv[]) { 
    float flt = 0.0f; // gets around optimization 
    return int(flt); // will link 
} 

、どのような根本的な問題は、ここで次のようになります。私のプログラムの任意の場所で浮動小数点演算を置くが、それは問題なくリンクすることができますか?

+0

これは、複数のバージョンのCランタイムライブラリにリンクしていることを示す記号です。あなたは/ MTdを使ってSDL2.libを再コンパイルしたと言った。あなたのアプリケーションはどのようにコンパイルされていますか?/MTdでコンパイルする必要があります。 –

+0

@CodyGray - aye、SDL2と私の実行可能ファイルは両方とも/ MTdでデバッグ用、/ MTはリリース用で、私はトリプルチェックしているので、これが最も一般的な理由だと思われます –

+0

これは本当に唯一のことです。 CRTは '__fltused'シンボルを定義します。異なるバージョンのランタイムライブラリでコンパイルされた可能性のある他のLIBファイルを*リンクしていますか? –

答えて

0

私が覚えていることから、これを試すことができます。

#ifdef __cplusplus 
extern "C" { 
#endif 
int __fltused=0; 
#ifdef __cplusplus 
} 
#endif 
+0

すみません、私は私にとってはうまくいかない –

1

問題は、SDL2のコンパイル方法に問題がありました。

スタティックリンケージ用に/ MTdまたは/ MTスイッチを使用してライブラリをコンパイルするだけでは不十分です。ライブラリーにはコンパイル時にも定義されたHAVE_LIBCがあり、静的にCランタイムに正しくリンクされます。

関連する問題