1. 程式人生 > >C++:常見錯誤LNK2019的幾種原因

C++:常見錯誤LNK2019的幾種原因

轉自:https://www.cnblogs.com/thisway/p/5497200.html

error LNK2019問題在VC 6.0中是error LNK2001: unresolved external symbol問題,可能錯誤號改了。

編譯時出現類似這樣的錯誤:Dlgcode.obj : error LNK2019: 無法解析的外部符號 _readRegmark,該符號在函式 [email protected] 中被引用。這種錯誤的本質是連結器無法在已編譯的obj、lib或dll檔案中找到函式定義。

2、你自己寫的函式宣告的標頭檔案也寫了函式定義的cpp檔案,卻依然出現LNK2019錯誤。可能原因:忘記將這兩個檔案加入工程了。一般出現於用Visual Studio和記事本(或UltraEdit)混合開發過程,你用記事本include了相應的標頭檔案,卻忘了在Visual Studio的工程中加入它們了。也可能出現於在解決方案的開發過程,在解決方案下的某個工程中加入了它們卻忘了在其他工程中加入,我只接觸過VC 6和VS 2008,中間好多年沒用過新版本VS,到2008時突然發現怎麼多了個“解決方案”,“解決方案”下面還可以放好多工程,於是經常在一個工程中寫了共享的原始碼,卻忘了在別的工程中加入它們。這個問題類似於第1個,不同的是這個庫是你自己提供的,但沒有把它交給VS 2008編譯出來。

3、你自己寫的函式宣告的標頭檔案也寫了函式定義的cpp檔案也加入工程了而且你很確定函式體肯定是在這個庫檔案中,卻依然出現LNK2019錯誤。可能原因:C語言和C++語言混編,因為C++支援函式過載所以C++編譯器生成的庫檔案中的函式名會面目全非,例如C編譯器會生成 _readRegmark 這個函式名,而C++編譯器則生成了"void __cdecl readRegmark(char *)" ([email protected]@[email protected])這麼個函式名。當你的函式是用C語言寫的,VS編譯器會按C語言規則編譯,但連結器卻不知道還傻傻的用C++規則的函式名去找結果就找不到了,而你還百般肯定TM的不就在這個庫中嗎你個睜眼瞎。解決:在C語言的標頭檔案中加入

複製程式碼複製程式碼
#ifdef __cplusplus
extern "C" {
#endif

void readRegmark(char *regmark);  //這裡寫函式宣告

#ifdef __cplusplus
}
#endif
複製程式碼複製程式碼

給連結器提示這個函式是C語言的,別TM找錯了。

7、函式定義沒有放在函式/類宣告的名稱空間中namespace


相關推薦

C++常見錯誤LNK2019原因

轉自:https://www.cnblogs.com/thisway/p/5497200.htmlerror LNK2019問題在VC 6.0中是error LNK2001: unresolved external symbol問題,可能錯誤號改了。編譯時出現類似這樣的錯誤:

c++編譯常見錯誤原因集中

解決 architect pan arc sym def sed default fine 1 c++ compiler error c4430 "c++ doesn‘t support default int" 1.1 可能的原因之一 我用了在一個頭文件中定義的宏,但是忘

分析電腦死機的常見原因,以及對應的解決方法

似的 幹凈 積累 很多 四種 針對 自己 直接 無法開機 很多的電腦用戶都遇到過各種各樣的電腦故障,例如花屏、黑屏、又或者是電腦無法開機、死機等等都是比較常見的故障,為了修好電腦,我們今天就來了解下,當電腦經常死機,我們用什麽方法解決呢?下面就跟隨小編一起來看下吧。造成電腦

C語言定義字串的方式

#include <stdio.h> #include <stdlib.h> int main() { //定義字串的幾種方式 //字串和字元陣列的區別:最後一位是否是空字元 char names1[] = {'

C中“fatal error C1075: end of file found before the left brace '{'”錯誤可能解決方法

fatal error C1075: end of file found before the left brace '{'的幾種情況 1.缺少"}",是括號不匹配的問題 2.某些特殊的轉義字元多寫了

C#多線程的方法

task start invoke 數組 erl method 並行計算 bsp nbsp 1、Theard2、TheardPool 線程池3、Task 在Theard上做了優化和改進,建議使用 .start();4、Task.Factory.Start(method)

C++多態有哪方式?

cti 早綁定 時間 對象 區別 父類 不同的 版本 內幕 C++多態方式: (1)靜態多態(重載,模板) 是在編譯的時候,就確定調用函數的類型。 (2)動態多態(覆蓋,虛函數實現) 在運行的時候,才確定調用的是哪個函數,動態綁定。運行基類指針指向派生類的對象,並調用派生類

關於常見繼承的方法

初始化 logs 正在 不能 構造 函數 都是 cti eth 一:關於繼承 1、原型鏈繼承: 原理:是將父類的實例,轉換子類的原型 優點:繼承關系非常清晰 易於實現 缺點:來自原型對象引用的屬性都是所有實例共享的 創建子類的實例時,無法向

C# 連接 Oracle 的方式

微軟公司 客戶 access unicode address 空間 cti 下載 oracle客戶端 一:通過System.Data.OracleClient(需要安裝Oracle客戶端並配置tnsnames.ora)1. 添加命名空間System.Data.Oracl

C++ 鏈接錯誤 LNK2019,LNK2001

編程 ack rdo 編寫 public 添加 new void 繼承 LNK2019 c和c++混合編程 解決方法: 對c編寫的部分,添加 #ifdef __cplusplusextern "C" {#endif #ifdef __cplusplus}#endif 到

c++控制臺如何用近似色來代替RG.../算法]

控制臺 blog ecb .com targe cee icu pos iam ekke26錘排儷乒諞迅http://blog.sina.com.cn/s/blog_17bde37e60102xh7h.htmlj9513z霞蟹孟雍膊顆http://blog.sina.com

[轉]C語言常見錯誤總結1

process log item 它的 too 問題 程序 副本 proc 指針與數組的對比c程序中,指針和數組在不少地方可以相互替換著用,讓人產生一種錯覺,以為兩者是等價的 數組要麽在靜態存儲區被創建(如全局數組),要麽在棧上被創建。數組名對應著(而不是指向)一塊內存,其

C#線程同步的方法

sso 代碼 services 讀寫 基於 star 代碼段 不能 命名   在網上也看過一些關於線程同步的文章,其實線程同步有好幾種方法,下面我就簡單的做一下歸納。   一、volatile關鍵字   volatile是最簡單的一種同步方法,當然簡單是要付出代價的。它

性能測試中TPS上不去的原因淺析

minor 為什麽 tom 並行 解釋 測試結果 復雜 可用 get 先來解釋下什麽叫TPS: TPS(Transaction Per Second):每秒事務數,指服務器在單位時間內(秒)可以處理的事務數量,一般以request/second為單位。 關於性能測試的其他一

C#獲取當前路徑的方法

size start orm name uri path ant tom 當前 //1.獲取模塊的完整路徑。 string path1 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileNam

深入研究Spring-IoC 容器建立的方式

1.前言 本文為對tiny-spring的學習解讀,程式碼參考自tiny-spring。一個手寫的Spring簡易版框架。 前面已經提到了Spring IOC容器的建立大致分為3個步驟。但是這個三個步驟是有一個演進的過程的,Spring容器建立方式前後有6種,從最基本的例項化建立

網頁載入慢,你知道原因

記得以前有個培訓班的老師過來宣傳,他當時問了我們一個問題,“開啟一個網頁慢,你能說出10個原因麼?”,我腦海裡立刻就出現了網速慢、電腦卡等原因,但是發現自己能說出的不超過五個,自己還是學web的,GG。今天突然想到了這個問題,就總結下 頻寬不足,首先想到的就是自己網速的

Objective-C遍歷資料的方式

遍歷的幾種方式: 1、通過索引,如通過陣列下標來遍歷陣列 -objectAtIndex() 2、使用NSEnumerator容器來存放資料項,通過nextObject來獲取下一個資料 3、使用快速列舉(os x10.5以後) 4、最新的程式碼塊方法(os x 10.5以後)

C++ Vector遍歷的方式及效能對比

幾種容器遍歷方法 1.迭代器 for (std::vector<int>::iterator it = vecTest.begin(); it != vecTest.end(); ++it) { tempNum = *it; } 2.C++11 新增關鍵字auto f

求組合數C(n,m) % mod的方法

演算法一:乘法逆元,在m,n和mod比較小的情況下適用 乘法逆元:(a/b)% mod = a * b^(mod-2),mod為素數   #include<iostream> #include<cstdio> #include<cmath>