“error LNK2019: 無法解析的外部符號”問題解決方案

最近用VS2013編程時,出現如下錯誤:

錯誤 75 error LNK2019: 無法解析的外部符號 "public: __thiscall CmCurveEx::CmCurveEx(class cv::Mat const &,float)" (??0CmCurveEx@@QAE@ABVMat@cv@@M@Z),該符號在函數 "public: bool __thiscall CaptureToyContourPixel::CaptureGLBufferToBMPOf24BitsInAnyLarge(char *,int,int,int,int)" (?CaptureGLBufferToBMPOf24BitsInAnyLarge@CaptureToyContourPixel@@QAE_NPADHHHH@Z) 中被引用 C:\Users\liulimingl\Desktop\EasyToy4.24\DrawDll\CaptureToyContourPixel.obj DrawDll

然後各種查閱,有說是找不到附加依賴項的,提出這樣解決:

project-屬性--link--輸入--依賴庫: 添加相應的庫文件.lib

實驗後,發現仍然不正確,最後在一篇博客中找到解決方法如下:

有一個解決方案,有兩個工程A,B。工程B中定義了一個類,在工程A的demo.cpp中引用該類,但是如果是

#include "XX,h",則會出現“error LNK2019: 無法解析的外部符號”

如果是#include "XX.cpp",則可以順利編譯通過。

想來是因爲引用 .h 文件導致找不到.cpp中的定義,而引用.cpp可以通過.cpp找到.h(.cpp有對.h的include)

但是如果同在工程B下面,則#include "XX,h"也是正確的,它會自動關聯到同名的(反正是對應的).cpp文件。

在不同工程中應該如何引用呢?

看見一種原因分析,如下:

現場情況:

funcname 在文件file.cpp/h中定義實現

void funcname(void) {;}

filecall.c文件內呼叫funcname()函數。

出現上面情況。

症因:因c/c++混合編程, c文件內函數無法呼叫c++文件內函數。

解決,或者將c文件名改爲.cpp,或者將c++文件名改爲.c

上面的解決採用將 file.cpp 更名爲file.c即可。

在這裏mark一下,轉自:http://blog.csdn.net/friday5pm/article/details/1523859

發佈了18 篇原創文章 · 獲贊 27 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章