。當我使用這個庫編寫示例程序時,我遇到了以下鏈接器錯誤。正如我們所看到的,這些所有「未解決」的符號都是Windows API函數,而這些Windows API函數被ITK庫使用,而不是我的程序。我使用的是<a href="http://www.itk.org" rel="nofollow noreferrer">ITK library</a>鏈接Windows的API
Error 1 error LNK2019: unresolved external symbol [email protected] referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" ([email protected]@@[email protected]) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 2 error LNK2019: unresolved external symbol [email protected] referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" ([email protected]@@[email protected]) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 3 error LNK2019: unresolved external symbol [email protected] referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" ([email protected]@@[email protected]) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 4 error LNK2019: unresolved external symbol [email protected] referenced in function "int __cdecl gdcm::GetMacAddrSys(unsigned char *)" ([email protected]@@[email protected]) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 5 error LNK2019: unresolved external symbol [email protected] referenced in function "private: static bool __cdecl gdcm::Util::GenerateUUID(unsigned char *)" ([email protected]@[email protected]@[email protected]) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 6 error LNK2019: unresolved external symbol [email protected] referenced in function "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl gdcm::Util::GetIPAddress(void)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 7 error LNK2019: unresolved external symbol [email protected] referenced in function "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl gdcm::Util::GetIPAddress(void)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
Error 8 error LNK2019: unresolved external symbol [email protected] referenced in function "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl gdcm::Util::GetIPAddress(void)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) C:\Projects\sampleProject\bin\itkgdcm.lib(gdcmUtil.obj)
這些錯誤在我的腦海裏提出了幾個問題。對於他們中的一些人,我想我知道答案,但如果我是對還是錯,我需要確認。
這些Windows API函數用於gdcmUtil.cpp(因爲它表示爲gdcmUtil.obj)。因此,編譯器將gdcmUtil.cpp編譯爲(比如說)gdcmUtil.asm,並且它是彙編程序將其組裝到gdcmUtil.obj中。由於在編譯庫時我們不會生成任何exe文件。這些* .obj文件不與任何其他* .obj鏈接。因此,Windows API符號仍然是該模塊的外部符號,因此無法解決。對?
誰產生是* .lib文件?我的意思是編譯器正在生成* .s文件,並且彙編程序正在生成* .obj文件,我們沒有使用鏈接器。那麼,我們從哪裏得到* .lib文件?誰將所有* .obj文件打包到* .lib文件?
如何(這是用C語言編寫,並使用Windows API的程序)的Windows API應用程序被編譯?我的意思是,因爲它的獨立應用程序如何解決這些WIN32 API符號?假設,我寫過這樣的程序,任何人都可以告訴我我需要什麼來成功構建應用程序?
我知道Windows API是在kernel32.dll,gdi32.dll,user32.dll(它可能反過來導入一些其他dll,如wsock32.dll的網絡API等)實現,但問題是如何使用Windows API函數中的這些函數在C程序中。我的意思是如何動態地對這些DLL
鏈接在我的追求找到答案,我的鏈接錯誤的問題。我發現我必須爲鏈接器輸入添加wsock32.lib(用於WinSock 1.1)或ws2_32.lib(用於WinSock 2)或snmpapi.lib。
- 因爲當Windows API被靜態鏈接?
- 從什麼時候Windows API在靜態庫(* .lib文件)中發貨?
- 在哪個目錄中可以找到所有這些奇怪的* .lib文件?
現在,除了將* .lib文件添加到鏈接器輸入文件之外,還有其他解決方案嗎?因爲當我使用一些新的ITK庫函數時,我得到一個新的鏈接器錯誤。我要谷歌找到哪個* .lib文件這個特定的符號(窗口api函數)所屬,然後將該* .lib文件添加到我的鏈接器輸入。這讓我瘋狂!有沒有理智的方法?
每個函數的MSDN頁面都包含它所屬的lib文件。例如:http://msdn.microsoft.com/en-us/library/aa378899(VS.85).aspx – claws 2010-08-05 03:58:13