簡體   English   中英

鏈接器錯誤C ++ Visual Studio 2005

[英]Linker Errors C++ Visual Studio 2005

對於我什至沒有直接調用的方法,我在Visual Studio中遇到了很多鏈接器錯誤。 我現在是Java開發人員,但是我有一個需要在C ++中執行的項目,旨在在Windows計算機上運行。 因此,我被Visual Studio困擾。

Bascally,我有一個os項目,向其中添加了一個accessor方法。 我將該項目編譯為.lib文件(可以正常編譯和鏈接)。

然后,我有一個使用該lib的項目。 我已將該庫包含在“項目”->“屬性”->“鏈接器”->“輸入”下,並在“常規”->“其他庫目錄”中設置了適當的目錄。 我已經將頭文件包含在適當的文件中,而我只是在調用類之一的構造函數...甚至沒有調用我創建的方法。

代碼可以編譯,但是我得到了以下大量的鏈接器錯誤-大多數是LNK2019和LNK2001錯誤。 我嘗試在不同的設置(lib,exe等)下進行重新編譯,並且鏈接器錯誤似乎只會成倍增加。 當我切換回先前的設置時,錯誤數量仍保持在最高水平。 任何想法如何解決這一問題?

構建日志

開始構建:項目:SpamCapture,配置:Debug | Win32

命令行:

創建內容為[/ VERBOSE:LIB /OUT:"C:\\SpamCapture\\SpamCapture\\SpamCapture\\Debug\\SpamCapture.exe“ / INCREMENTAL / LIBPATH的臨時文件“ c:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ RSP0000103081740.rsp” “ C:\\ SpamCapture \\ Config \\ Debug \\” / MANIFEST /MANIFESTFILE:"Debug\\SpamCapture.exe.intermediate.manifest“ /NODEFAULTLIB:"libcmtd.lib” /NODEFAULTLIB:"nafxcwd.lib“ / DEBUG / PDB:” c :\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ SpamCapture.pdb“ / SUBSYSTEM:CONSOLE / MACHINE:X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32 .lib uuid.lib odbc32.lib odbccp32.lib

“\\調試\\ Interaction.obj”

“\\調試\\ InteractionSet.obj”

“\\調試\\ LogReader.obj”

“\\調試\\ SpamCapture.obj”

“\\調試\\ StdAfx.obj的”

“\\調試\\ SpamCapture.res”

“。\\ Debug \\ SpamCapture.exe.embed.manifest.res”]創建命令行“ link.exe @c:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ RSP0000103081740.rsp / NOLOGO / ERRORREPORT:PROMPT”

輸出窗口:

鏈接...鏈接:警告LNK4067:入口不明確; 選定的'mainCRTStartup'搜索庫搜索C:\\ SpamCapture \\ Config \\ Debug \\ KeyCapture_Config.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ kernel32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ user32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ gdi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ winspool.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comdlg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ advapi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shell32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ole32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ oleaut32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ uuid.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\李 b \\ odbc32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbccp32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ msvcprtd.lib:搜索C :\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ MSVCRTD.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ OLDNAMES.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfc80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfcs80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ msimg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comctl32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shlwapi.lib:搜索C :\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ atlsd.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ wininet.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ws2_32.lib:搜索C:\\ Pr 圖Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ mswsock.lib:搜索C:\\ SpamCapture \\ Config \\ Debug \\ KeyCapture_Config.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ kernel32。 lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ user32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ gdi32.lib:搜索C:\\程序文件\\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ winspool.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comdlg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ advapi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shell32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ole32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ oleaut32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ uuid.lib:搜索C :\\ Program Files \\ Microsoft Visual St udio 8 \\ VC \\ PlatformSDK \\ lib \\ odbc32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbccp32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ msvcprtd.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ MSVCRTD.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ OLDNAMES.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfc80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ mfcs80ud.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ msimg32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comctl32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shlwapi.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ atlmfc \\ lib \\ atlsd.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ wininet.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ws2 _32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ mswsock.lib:搜索C:\\ SpamCapture \\ Config \\ Debug \\ KeyCapture_Config.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ kernel32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ user32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ gdi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ winspool.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ comdlg32.lib:搜索C :\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ advapi32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ shell32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ ole32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ oleaut32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ uuid.lib:搜索C:\\ Program F iles \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbc32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ PlatformSDK \\ lib \\ odbccp32.lib:搜索C:\\ Program Files \\ Microsoft Visual Studio 8 \\ VC \\ lib \\ msvcprtd.lib:搜索庫完成

鏈接器錯誤從此處開始:

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj):錯誤LNK2001:無法解析的外部符號“ public:虛擬int __thiscall CWnd :: Create(char const *,char const *,unsigned long,struct tagRECT const&,class CWnd *,unsigned int,struct CCreateContext *)“(?Create @ CWnd @@ UAEHPBD0KABUtagRECT @@ PAV1 @ IPAUCCreateContext @@@@ Z)

...更多這樣

KeyCapture_Config.lib(KeyCapture_ConfigDlg.obj):錯誤LNK2019:無法解析的外部符號“ public:struct HICON__ * thiscall CWinApp :: LoadIconA (unsigned int)const”(?LoadIconA @ CWinApp @@ QBEPAUHICON @@ I @ Z)公開:__thiscall CKeyCapture_ConfigDlg :: CKeyCapture_ConfigDlg(class CWnd *)“(?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)

...更多這樣

(?DoDataExchange @ SetupDialog @@ MAEXPAVCDataExchange @@@@ Z)C:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ SpamCapture.exe:致命錯誤LNK1120:34無法解析的外部

結果:

構建日志保存在“ file:// c:\\ SpamCapture \\ SpamCapture \\ SpamCapture \\ Debug \\ BuildLog.htm” SpamCapture-44錯誤,1警告

KeyCapture_Config.lib使用的是MFC GUI類( CWndCWinApp等),但是您將其鏈接到的應用程序是一個控制台應用程序(請參閱鏈接器命令行中的/SUBSYSTEM:CONSOLE選項)。 這行不通。 您應該創建一個新的MFC GUI應用程序項目,並將庫添加到該項目。

編輯:我剛剛檢查了您評論中的鏈接: http ://dynamicnetservices.com/~will/academic/textinput/keycapture/,看來KeyCapture_Config實際上是使用KeyCapture DLL的MFC對話框應用程序。 通過直接與KeyCapture.lib鏈接,可以在控制台應用程序中使用KeyCapture.lib

鏈接錯誤似乎是在抱怨缺少許多MFC函數,並且您鏈接的行包括:/NODEFAULTLIB:"nafxcwd.lib“,它將排除MFC。 您要鏈接的lib是使用MFC構建的嗎?

要檢查的其他事情是,您正在使用相同的字符集(即,都是多字節還是都是unicode)編譯應用程序和lib。

當您構建庫時,沒有鏈接步驟,因此可以將任意對象集合放入庫中,而無需考慮它們可能還需要什么。

看起來您的項目正在與“調試多線程”運行時鏈接。 這是你的意圖嗎? 如果是這樣,則可能與您似乎正在使用的KeyCapture_Config庫不一致。

KeyCapture_Config是第三方庫嗎? 如果是這樣,那么您是從源代碼構建它還是為您提供了lib / dll?

可能只需要針對構建哪些C / C ++運行時進行一些調查。 您可以參考Microsoft KB文章 ,該文章可能有助於闡明可能的運行時內部版本差異。

我認為Rob Walker已解決了這個問題。 如果KeyCapture_Config.lib的文檔說沒有與MFC的鏈接,請檢查源代碼中是否需要與MFC的鏈接。 像這樣:

#pragma comment(lib, "nafxcwd.lib")

會導致對MFC的依賴,並且KeyCapture_Config.lib文檔可能已過時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM