2010-10-26 70 views
2

我在Visual Studio中對C++有點新,我試圖用Visual Studio編譯一個龐大的C++項目。我已經完成了所有的源代碼和頭文件,並將其添加到了我的項目中,並且還更新了項目屬性中的所有包含路徑。C++項目編譯爲靜態庫,但不是動態的(Visual Studio)

如果我將項目類型設置爲「靜態庫(.Lib)」,則該項目將無錯誤地編譯,我將擁有一個不錯的.lib文件。

如果我將項目更改爲「動態庫(.dll)」,項目不再編譯並且鏈接錯誤失敗。

這裏有一個示例:

Error 27 error LNK2001: unresolved external symbol "char const * __cdecl Project::toString(enum Project::compMode)" ([email protected]@@[email protected]@@Z) H:\repo.project\user\tool\component.obj tool 

什麼可能會發生在這裏的任何幫助或背景?

+1

其中是項目:: toString定義/實施?你只有一個項目還是有依賴關係? – 2010-10-26 16:21:29

回答

4

檢查,如果你定義了以下成員函數

char const* Project::toString(Project::compMode) 

當你編譯爲靜態庫的未解決的符號是不是一個錯誤,因爲它可以當你與其他代碼鏈接以後解決。

您可能忘記將一些.cpp文件添加到您的項目中。

+0

我確實!但問題是,如果我錯過了.cpp文件,爲什麼它會編譯爲lib而不是dll? – Nick 2010-10-26 16:57:53

+0

靜態庫只是對象文件的集合,它可能包含您正在使用但尚未定義的符號。另一方面,dll和exectutables應該具有除dllimport屬性被解析的所有符號(粗略地說)。 – vitaut 2010-10-26 17:01:07

相關問題