1. 程式人生 > >VS連結器工具錯誤 LNK2019:無法解析的外部符號

VS連結器工具錯誤 LNK2019:無法解析的外部符號

常見的問題

以下是一些導致 LNK2019 的常見問題:

  • 未連結的物件檔案或包含符號定義的庫。 在 Visual Studio 中,驗證包含定義原始碼檔案是生成,分別連結為專案的一部分。 在命令列中,驗證編譯時包含定義的原始檔,並且所生成物件檔案包含在要連結的檔案列表。

  • 符號的宣告不拼寫與符號的定義相同。 驗證在宣告和定義,使用正確的拼寫和大小寫,並且是使用或呼叫該符號的任何位置。

  • 使用一個函式,但數量的引數的型別與函式定義不匹配。 函式宣告必須匹配定義。 驗證函式呼叫是否匹配宣告以及宣告是否匹配定義。 呼叫模板函式的程式碼還必須擁有包括與定義相同的模板引數的匹配模板函式宣告。 模板宣告不匹配的示例,請參閱示例 LNK2019e.cpp 示例部分中。

  • 宣告但未定義的函式或變數。 這通常意味著在標標頭檔案中,存在宣告,但不匹配定義實現。 對於成員函式或靜態資料成員,實現必須包括類範圍選擇器。 有關示例,請參見 Missing Function Body or Variable

  • 呼叫約定是函式宣告和函式定義之間的差異。 呼叫約定 (__cdecl、 __stdcall、 __fastcall、 or __vectorcall) 作為修飾名稱的一部分進行編碼。 驗證呼叫約定是否相同。

  • 符號定義在 C 檔案中,但未使用 extern"C"在 c + + 檔案中進行宣告。 在作為 C 編譯的檔案中定義的符號擁有與在 C++ 檔案中宣告的符號不同的修飾名稱,除非使用了 

    extern "C" 修飾符。 驗證宣告是否匹配每個符號的編譯連結。

    同樣,如果在 C 程式將使用的 C++ 檔案中定義符號,請在定義中使用 extern "C" 。

  • 一個符號是定義為靜態,然後更高版本在檔案外部引用。 與 C 不同,在 C++ 中, 全域性常量 擁有 static 連結。 若要避開此限制,你可以在標頭檔案中包括 const 初始化並將該標頭包括在你的 .cpp 檔案中,或者你可以讓變數成為非常量並使用常量引用來訪問它。

  • 未定義一個類的靜態成員。 靜態類成員必須擁有唯一的定義,否則它將違反單個定義規則。 無法以內聯方式定義的靜態類成員必須通過使用其完全限定名稱在一個原始檔中進行定義。 如果沒有進行定義,那麼連結器會生成 LNK2019。

  • 生成依賴項僅定義為解決方案中專案依賴項。 在 Visual Studio的早期版本中,此級別的依賴項已經足夠。 但是,從 Visual Studio 2010 開始, Visual Studio 要求 專案到專案引用。 如果你的專案沒有專案到專案引用,那麼你可能收到此連結器錯誤。 新增專案到專案引用以修復此錯誤。

  • 你通過使用 Windows 應用程式的設定生成了控制檯應用程式。 如果錯誤訊息是類似於WinMain 函式中引用的無法解析外部符號function_name,通過使用連結/subsystem: console而不是/SUBSYSTEM:WINDOWS。 有關此設定的詳細資訊以及如何在 Visual Studio 中設定此屬性的說明,請參閱 /SUBSYSTEM (Specify Subsystem)

  • 為在不同的原始檔中內聯的函式使用不同的編譯器選項。 使用 .cpp 檔案中定義的行內函數並在不同原始檔中混合使用函式內聯編譯器可能會導致 LNK2019。 有關詳細資訊,請參閱 Function Inlining Problems

  • 在其範圍之外使用自動變數。 自動(函式範圍)變數僅可在該函式的範圍內使用。 這些變數不可宣告為 extern ,也不能在其他原始檔中使用。 有關示例,請參見 Automatic (Function Scope) Variables

  • 呼叫內部函式,或將引數型別傳遞到目標體系結構不支援的內部函式。 例如,如果你使用 AVX2 內部函式,但未指定 /ARCH:AVX2 編譯器選項,那麼編譯器會假定該內部函式是外部函式。 編譯器不會生成內聯指令,相反,它會生成一個對與內部函式同名的外部符號的呼叫。 當連結器嘗試找到此缺失函式的定義時,它會生成 LNK2019。 驗證是否只使用了目標體系結構支援的內部函式和型別。

  • 混合的程式碼不使用本機 wchar_t 的程式碼。 在 Visual C++ 2005 中完成的 C++ 語言一致性工作讓 wchar_t 成為預設本機型別。 你必須使用 /Zc:wchar_t- 編譯器選項來生成相容使用 Visual C++ 早期版本進行編譯的庫和物件檔案的程式碼。 如果並非所有檔案都已經使用相同的 /Zc:wchar_t 設定進行編譯,那麼型別引用可能不會解析為相容的型別。 驗證所有庫和物件檔案中的 wchar_t 型別是否相容,方法是更新使用的型別或在編譯時使用一致的 /Zc:wchar_t 設定。

實際遇到的問題 1.在建立工程的時候,選擇了Win32專案,然後選擇了控制檯應用程式時,連結時會出現錯誤: LNK2019無法解析的外部符號 [email protected],該符號在函式 "int __cdecl invoke_main(void)" ([email protected]@YAHXZ) 中被引用
解決方法:連結器>>系統>>子系統>>視窗(/SUBSYSTEM:WINDOWS)改為控制檯(SUBSYSTEM:CONSOLE) 2.在cpp檔案中,如果存在C定義的符號,例如:#pragma comment(lib, avutil.lib) ,要將其放在extern "C"內

相關推薦

VS連結工具錯誤 LNK2019無法解析外部符號

常見的問題 以下是一些導致 LNK2019 的常見問題: 未連結的物件檔案或包含符號定義的庫。 在 Visual Studio 中,驗證包含定義原始碼檔案是生成,分別連結為專案的一部分。 在命

連結工具錯誤 LNK2019 C++primer5第十五章程式錯誤的解決

編寫C++第十五章15.9 文字程式再探程式時 由於初寫C++程式造成許多錯誤 最初是出現LNK2005錯誤 由於重複定義標頭檔案產生,通過查詢在每個標頭檔案前鍵入條件預處理指令如下 #ifndef NOTQUERY //如果沒有定義這個巨集 #define NOTQUER

連結工具錯誤 LNK2019

錯誤訊息 在函式“function”中引用了無法解析的外部符號“symbol” 在 function 中找到了未定義的外部符號 (symbol)。若要解決此錯誤,請提供符號定義或移除引用它的程式碼。一般報錯如下: error LNK2001: unresolved ex

MSDN對連結工具錯誤 LNK2019的解釋

連結器無法找到函式“function”中使用的外部符號“symbol”的定義。 有許多問題可能會導致此錯誤。 本主題將幫助你確定原因並找到解決方案。 外部符號是你在原始碼中用於引用在另一物件或庫檔案中定義的內容的宣告名稱,例如,一個外部函式或全域性變數。 連結器負責解

連結工具錯誤 "LNK2026 XXX模組對於 SAFESEH 映像是不安全的" LINK : fatal error LNK1104: 無法開啟檔案“LIBCD.lib”

解決方法: 1.開啟該專案的“屬性頁”對話方塊。 2.單擊“連結器”資料夾。 3.單擊“命令列”屬性頁。 4.將/SAFESEH:NO 鍵入“附加選項”框中,然後點選應用。       出現這類問題一般是由於所執行的專案是VC6(或者vs2003)建立的,而後又用VS2005或者更高版本

連結工具錯誤 LNK2026 XXX模組對於 SAFESEH 映像是不安全的

新浪部落格 http://service.weibo.com/staticjs/weiboshow.swf?verifier=a63d6d67&uid=1283818905&width=230&height=500&fansRow=2&a

連結工具錯誤 LNK2026 模組對於 SAFESEH 映像是不安全的

一、概述        今天用VS 2013開啟一個之前VS2010下的一個c/c++專案,生成的時候報錯:“LNK2026 模組對於 SAFESEH 映像是不安全的”。網上搜了一下,發現瞭解決方案:

VS下QT外掛 連線資料庫出現error LNK2019 無法解析外部符號QSqlDatabase問題解決

出現如下錯誤: error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __thiscall  QSqlDatabase::~QSqlDatabase(void)" ([email protected]@[e

VS2012 連結工具錯誤 LNK2026

VS2012遇到一個問題:"連結器工具錯誤 LNK2026 XXX模組對於SAFESEH 映像是不安全的 解決方法: 1.開啟該專案的“屬性頁”對話方塊。 2.單擊“連結器”資料夾。 3.單擊“命令列”屬性頁。 4.將/SAFESEH:NO 鍵入“附加選項”框

error LNK2019無法解析外部符號 _mysql_****

--------------------------------------------------------------------------------------------------

ERROR LNK2019無法解析外部符號 _sscanf或者_vsprintf

Visual Studio 2015 作業系統:win 10 問題: 編譯的時候可能會遇到 ERROR LNK2019:無法解析的外部的符號 __vsnwprintf_s,或者是_sscanf,_sscanf_s等等一系列形如這樣的函式 疑問: 這些函式明明

OpenCv在win下靜態庫的編譯和使用,以及部分無法解析外部符號錯誤解決

這裡演示的是opencv3.4版本的編譯和使用過程。1、靜態庫編譯CMake進行配置,編譯時我選擇build目錄為build-static。其中需要設定選擇安裝目錄,設定   “CMAKE_INSTALL_PREFIX”  為   /build-static/install 

c++連接mysql數據庫出現無法解析外部符號的問題

vs、解析外部符號include,lib文件夾都已經拷到了項目根目錄,並且設置好了路徑,生成就會出現無法解析的外部符號,提示我無法轉到函數的定義,最後發現vs2017默認win32,但是我的程序集64位的。更改後,重新設置目錄,路徑即可。c++連接mysql數據庫出現無法解析外部符號的問題

error2019無法解析外部符號

“error LNK2019: 無法解析的外部符號 error LNK2001: 無法解析的外部符號“private: static struct _OVERLAPPED CUsbCom::g_WriteOverlapped” 應該是工程設定的問題 沒有連線相應

VS2015無法解析外部符號

在使用VS編輯C++時,遇到了無法解析外部符號的錯誤 嚴重性程式碼說明專案 檔案行 錯誤LNK2019 無法解析的外部符號 "public: __thiscall Employee::Employe

Qt creator 編譯錯誤無法解析外部符號(命令)

log void virtual win idg track deb dia popu 問題來自於:僅僅是在creator 中加入了一個新的DIalog類,並在main(),中實例化並show。就出現例如以下的錯誤: main.obj:-1: error: L

分離式編譯時 鏈接工具錯誤 (一個變量被定義一次或多次)

效果 include private 可讀性 con lnk2005 可能 ring 生成 在編寫程序時,將類中的函數成員的聲明和定義分開,在頭文件(.h)中進行聲明,在源文件(.cpp)中進行定義 以及具體功能的實現。達到分離式編譯的效果,提高代碼的可讀性。 自己在編寫是

C++ 錯誤提示無法將引數1從const char [8] 轉換為char *

#include <iostream> using namespace std; void test(char * p) { cout << p << endl; } int main(void) { test("geerniya")

來自網頁的訊息錯誤訊息無法獲取未定義或null引用的屬性"RetCode" 怎麼解決。挺急的。感謝!!!

請問js檔案報錯: 來自網頁的訊息:錯誤訊息:無法獲取未定義或null引用的屬性"RetCode"  怎麼解決。挺急的。感謝!!! var Server=new ActiveXObject("TaxCardX.GoldTax");  var Retcode=0;  var

將檔案複製入U盤,出現錯誤0x80071AC3無法完成操作,因為卷有問題

windows電腦上的檔案無法複製、剪下到U盤內,U盤內的檔案右鍵選單中“刪除”項消失,直接用“delete”也沒反應,但U盤內檔案可以複製到電腦上,且在U盤內也可以正常開啟。進行如上操作時,彈出提示框:” 錯誤0x80071AC3:無法完成操作,因為卷有問題 “。 解決方