error LNK2019:unresolved external symbol *** referenced in function ***的解決方案
今天編譯檔案時遇到下列問題,記錄一下:
error LNK2019:unresolved external symbol *** referenced in function ***
錯誤原因:1)當標頭檔案中宣告瞭一個函式,但是在相應的原始檔中卻沒有對該函式進行定義,則會出現為“解決的外部符號”(unresolved external symbol )錯誤。
2)當一個函式呼叫了外部的一個庫檔案中的函式,但是在當前project的properties中並沒有將所依賴的(dependent)庫檔案包含進來時,也會出現這種錯誤。
3)當編譯的檔案沒有沒加入工程時,也會出現這種錯誤。
綜上,當一個solution在linking時找不到所涉及到的函式的定義時就會出現“unresolved external symbol ”錯誤。
例如,下面是呼叫MIL的庫檔案mil.lib中的函式時,由於沒有將mil.lib包含進來而導致的連結錯誤。
1>Linking...
1>MDispSelect.obj : error LNK2019: unresolved external symbol
_MappFree@4 referenced in function _main
1>MDispSelect.obj : error LNK2019: unresolved external symbol
_MsysFree@4 referenced in function _main
1>MDispSelect.obj : error LNK2019: unresolved external symbol
_MdispFree@4 referenced in function _main
【1,2解決方案】
1. Project -> ** Properties... -> Configuration Properties -> Linker -> Input -> Additional Dependencies -> mil.lib
另外,在此之前,還需新增MIL庫的相應目錄:Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for -> 在Include files中新增C:\Program Files\Matrox Imaging\Mil\Include 以及 Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for -> 在Library files中新增C:\Program Files\Matrox Imaging\Mil\LIB。新增目錄的目的是為了使VC在呼叫相應庫檔案時不必總是使用絕對地址,VC可以通過檔名在所包含的目錄中進行搜尋。這樣,前面的mil.lib就不必使用絕對地址了。
【缺點】可移植性差,如果將原工程中的原始檔和標頭檔案中的內容copy下來重新建立該工程時(例如:在電子書或網路上找到的程式),仍需自己在工程中新增目錄及所需的庫檔案。
2. 在程式前加入#pragma comment(lib, "mil.lib")也可以達到相同的效果。
【優點】避免了方案1所出現的問題。
【3解決方案】
將沒有加入的檔案加入到工程,重新編譯。問題得到解決。
相關文章
- VC6.0 報錯:error LNK2001: unresolved external symbol _clrscrErrorSymbol
- Visual Studio 2019 使用模板類定義和實現分離時,在主函式中引用標頭檔案編譯報錯 Error LNK2019 unresolved external symbol函式編譯ErrorSymbol
- error: use of deleted function ‘YYSTYPE::YYSTYPE()’[解決]ErrordeleteFunction
- psql: symbol lookup error: ./psql: undefined symbol: PQsetErrorContextVisibilitySQLSymbolErrorUndefinedContext
- ORA-00800: soft external errorError
- Error: error:0308010C:digital envelope routines::unsupported 解決方案ErrorGit
- 解決 Too many symbol filesSymbol
- YII2.0 jQuery(…).activeform is not a function in 終極解決方案jQueryORMFunction
- SSL錯誤ssl connect error 35的解決方案Error
- 問題解決local variable 'xxx' referenced before assignment
- windows redis sentinel listen: Unknown error解決方案WindowsRedisError
- 解決方案 | MiKTex SSL connect error code 35Error
- HTTP 錯誤 500.21 - Internal Server Error 解決方案HTTPServerError
- No grammar constraints (DTD or XML Schema) referenced in the document.的兩種解決辦法AIXML
- QT DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c000d ()QTError
- NSIS 官方對安裝包出現 NSIS Error 的解釋與解決方案Error
- Android Studio 顯示Cannot resolve symbol 'XXX'的解決方式AndroidSymbol
- Symbol詳解Symbol
- pyenv docter檢測出configure: error: OpenSSL is not installed.解決方案Error
- yarn add cross-env 出現 protocol error, symlink 解決方案YarnROSProtocolError
- Composer 記憶體不足解決方案 PHP Fatal error: Out of memory記憶體PHPError
- serverless Error: getaddrinfo ENOTFOUND Function.doRequestServerErrorFunction
- 帝國CMS提示parse error syntax error的解決方法Error
- eclipse 引入外部js檔案報Syntax error on token 錯解決方案EclipseJSError
- Error: The directory named as part of the path ./log/supervisord.log does not exist解決方案Error
- 解決 "Script Error" 的另類思路Error
- Android Studio 出現“Cannot resolve symbol” 解決辦法AndroidSymbol
- Spring注入bean報錯 Error creating bean with name的網上找不到的解決方案SpringBeanError
- Mac提示app損壞、Error,Mac電腦最常見錯誤的解決方案MacAPPError
- python -- 解決字典【KEY ERROR】PythonError
- 【已解決】Error filter ListenerStartErrorFilter
- Error creating bean with name 解決ErrorBean
- Xcode10 Archive Error - Multiple command product 'xxx/Info.plist' 解決方案XCodeHiveError
- [轉]Android Studio匯入工程報錯 Error:Cause: peer not authenticated 解決方案AndroidError
- Vue 下 ESLint 的 error 解決辦法VueEsLintError
- ArchLinux出現ACPI ERROR的解決方法LinuxError
- Linux 動態庫 undefined symbol 原因定位與解決方法LinuxUndefinedSymbol
- PSQLException: ERROR: failed to find conversion function from unknown to charSQLExceptionErrorAIFunction