天天看點

matlab與C++混合程式設計遇到的一些問題

一、進行MATLAB編譯MEX的時候,可能遇到這個問題

matlab與C++混合程式設計遇到的一些問題

這一般是由于matlab破解不完全導緻的。這裡需要搜尋破解檔案,然後替換相關檔案,可以參考其他部落格,我用的是2014a。

這裡是我用的破解檔案https://download.csdn.net/download/yanxiaoyunsana/11105959

二、進行VS程式編譯的時候可能會遇見這樣的問題。

matlab與C++混合程式設計遇到的一些問題

這是由于沒有stdafx.h檔案而導緻的,有很多解決方法,這裡提供一種,不編譯頭檔案,并且把此處注釋掉。

matlab與C++混合程式設計遇到的一些問題
matlab與C++混合程式設計遇到的一些問題

三、出現LINK2019的問題。

matlab與C++混合程式設計遇到的一些問題

這個有很多的原因,這裡參考另一篇文章https://www.cnblogs.com/hiloves/p/4678848.html,自己也學習一下。,紅色的部分是文章的内容,有興趣的可以了解。

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

1、這是百度找到的方法:http://jingyan.baidu.com/article/4d58d54135d7a79dd4e9c0ad.html。就是有頭檔案(有了函數聲明)卻沒有lib。一般出現于你使用了第三方提供的庫,下載下傳了頭檔案卻忘了載庫檔案,或庫檔案忘記放到相應的目錄下了。

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
           

4、這是我百度來的,姑且也放進來。http://blog.csdn.net/jtop0/article/details/5779782。模闆聲明和實作要放在同一檔案夾中。

5、也是百度來的。http://www.programlife.net/error-lnk2019.html。内聯函數定義在頭檔案中。

6、百度的。http://jingyan.baidu.com/article/d621e8da0d7c022864913f40.html。錯誤的工程類型造成的。

7、貌似還有不盡之處。http://www.douban.com/note/65638800/。

這裡的解決辦法是自己在進行MATLAB的MEX編譯的時候,這裡的編譯平台不一樣,MATLAB用的是X64為編譯的,這裡預設的是win32的編譯環境,是以要進行修改。

matlab與C++混合程式設計遇到的一些問題

四、還存在的問題就是,出現其他的LINK錯誤,這裡就需要檢查自己的配置環境是否正确,MATLAB生成的三個檔案是否拷貝到正确的地方。

繼續閱讀