2017-09-15 13 views
3

完整的輸出是這樣的(只有一個錯誤)定義,發佈版本似乎並沒有遇到同樣的問題鏈接:「__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運行時。