2011-06-07 173 views
0

嗨,所以我使用MSVS ++ 2010,並一直試圖設置SFML整天...... 我從網站下載1.6,然後在VS2010中重建它,但很難找到這沒有導致一個sfml-system-d.lib文件,這是我習慣使用的,並且只產生了新的系統和系統sd庫。SFML教程1:線程問題

然後我密切關注着這個Video,發現他通過添加sfml-system-sd的外部庫來運行他的測試代碼,所以我在.exe旁邊添加了sfml-system-d.dll並獲得了以下準確的同樣的代碼中的視頻顯示工作:

#include <iostream> 
#include <SFML/System.hpp> 

int main(int argc, char **argv) 
{ 
    sf::Clock clock; 

    sf::Sleep(0.1f); 

    while(clock.GetElapsedTime() < 5.0f) 
    { 
     std::cout << clock.GetElapsedTime() << std::endl; 
     sf::Sleep(0.5f); 
    } 
} 

明顯時鐘和睡眠的工作,但是當我添加的代碼,簡單的線條「SF ::線程線程();」彈出一個錯誤框,說「無法啓動程序」,「配置不正確」,「查看清單文件的可能錯誤」,「重新安裝我的修復程序」。

另外:試圖運行有關線程教程的第一個程序時:

#include <SFML/System.hpp> 
#include <iostream> 

void ThreadFunction(void* UserData) 
{ 
    // Print something... 
    for (int i = 0; i < 10; ++i) 
     std::cout << "I'm the thread number 1" << std::endl; 
} 

int main() 
{ 
    // Create a thread with our function 
    sf::Thread Thread(&ThreadFunction); 

    // Start it ! 
    Thread.Launch(); 

    // Print something... 
    for (int i = 0; i < 10; ++i) 
     std::cout << "I'm the main thread" << std::endl; 

    return EXIT_SUCCESS; 
} 

我得到這樣一個8個unresovled外部符號:

1>sfml-system-s-d.lib(Thread.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall std::ios_base::width(int)" ([email protected][email protected]@@[email protected]) 
fatal error LNK1120: 8 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

最後這是怎麼了我的項目設置:

  • 包括開箱即用的目錄,新下載的SFML 1.6/incl ude
  • lib目錄到VS2010重建SFML(調試/發佈DLL設置和靜態)。
  • 對sfml-system-s-d.lib文件的額外依賴。
  • 出frusteration的,我把每一個dll文件旁邊的.exe

回答

2

這聽起來像你可能不建設SFML當鏈接到CRT。 (ios_width是iostream的,這就需要CRT庫)。

您需要重建SFML,只不過這次做到以下幾點:庫

KERNEL32.LIB

0複製此列表 USER32.LIB
GDI32.LIB
winspool.lib
comdlg32.lib
advapi32.lib
SHELL32.LIB
ole32.lib
oleaut32.lib
UUID.LIB
odbc32.lib
odbccp32.lib

  1. 進入每個 單個項目的Properties -> Configuration -> Linker -> Input。 或者它沒有'Linker' 到Properties -> Configuration -> Librarian

  2. 集「忽略默認庫」,以 「不」,它可能會工作

  3. 如果你想成爲100%的安全,請點擊額外的依賴,展開它,然後單擊「編輯」。現在只是貼在庫上面

  4. 如果在「圖書管理員」選項卡,設置 鏈接庫依賴於YES

  5. 重複1-4每次 更改調試 DLL的構建設置,調試靜等

當我重新編譯SFML(當然,我有一個靜態編譯,因爲1.6是最後1.x的線,和2.0不兼容;))我不得不添加那些參考。它會忽略(並'忽略忽略)任何它不需要的東西,但它們是默認值;)

不幸的是,您需要更新SFML解決方案中的所有內容,如果我沒記錯的話,它們都缺少默認庫。

+0

所以我需要做的就是改變依賴關係? would'nt我也需要一些DLL文件? – Griffin 2011-06-08 01:01:31

+0

我是否需要更改每個項目(主,音頻,圖形)中的依賴關係,並且每次我切換fom時都會說調試DLL爲調試靜態 – Griffin 2011-06-08 01:01:37

+0

對不起,失去了一段時間的網絡(相當意外)。 更改依賴性應該是所有必需的,是的,每個項目配置(調試DLL,調試靜態,發佈DLL,發佈靜態)都需要重新配置。 如果您使用靜態構建路由(即構建Debug Static或Release Static),則不需要除openal32或libsndfile以外的任何其他DLL(如果這就是您的意思),並且除了內容之外,您不需要任何其他任何DLL要發佈的源代碼分發。 – aws 2011-06-11 06:08:22