C++與Matlab混編,調用生成的動態鏈接庫

轉載:http://www.zyh1690.org/c-calling-matlab-generated-dynamic-link-library/

平臺

VS2010 SP1

MATLAB R2014a (64-bit)

Win8.1 x64

注意:因爲需要用到mcc編譯器,所以事先先用!mcc命令查看一下你的mcc編譯器是否可用,部分未完全破解的Matlab是不可用的,截止今日(2015/4/10),至少R2014b還是不可用的。

我的這個Matlab版本的下載地址:http://yunpan.cn/cV3jhWpvDkKuB  訪問密碼 629b

Matlab上的相關操作

1.編寫.m文件

首先新建一個簡單的Matlab程序,

2.設置Matlab編譯器

在Matlab命令行窗口輸入命令:mex -setup

1

如圖,選擇VC2010編譯器。

接着輸入mbuild -setup命令,同樣選擇VC2010。

3.編譯.m文件

在命令行窗口輸入命令mcc -W cpplib:add -T link:lib add前面的 add 是編譯產生的文件名,後一個 add 指要編譯的.m文件。

2

導出目錄生成以下文件:

3

但我們需要使用的只是其中的 add.dll,add.lib,add.h 三個文件。

在VS2010上使用生成的動態鏈接庫

1.配置VS2010

新建一個win32控制檯應用程序(空項目),添加 MatlabAdd.cpp 文件,右鍵工程屬性(或者快捷鍵 Alt+F7),

C/C++ -> 常規 -> 附加包含目錄

鏈接器 -> 常規 -> 附加庫目錄:(注意,我的系統是x64,Matlab是x64的,所以使用win64) ,後一個是我生成的動態鏈接庫文件複製到的目錄

鏈接器 -> 輸入 -> 附加依賴項:

add.lib add.h文件複製到你的工程目錄,其中 .h 文件和 MatlabAdd.cpp 文件同目錄, .lib 文件放到可執行目錄中,也即Debug目錄(需編譯一次纔會出現),.dll文件複製到system32目錄(沒錯,即使你是x64的windows也要複製到這個目錄,否則找不到,或者將你add.dll所在的目錄添加到環境變量Path中,可能的原因是之前選擇的是32位的C/C++編譯器,產生的是32位windows動態鏈接庫,所以要放在system32目錄)

將 .h 文件添加到新建的項目,編寫 MatlabAdd.cpp 文件中的代碼:

x86平臺下,到此應該就可以運行了,但因爲我的是x64平臺,所以編譯時提示以下錯誤:

7

這是因爲以上鍊接中採用的是 x86,此操作系統爲 x64MATLAB R2012a爲 x64,解決辦法:

8

打開屬性頁右上角的配置管理器,活動解決方案平臺,選擇新建,加入64位:

9

最後運行,看到運行畫面:

10

成功!

Tips:如果還提示缺少dll文件,查找此dll所在的目錄(推薦使用everything這個軟件進行搜索),添加到Path環境變量中,或者複製到system32目錄中。

參考文章:

http://blog.sina.com.cn/s/blog_a5fdbf0101018n91.html

http://blog.csdn.net/wuyeyoulan23/article/details/21076913

運行的時候會出現一個錯誤,說“缺少mclmcrrt7_17.dll,導致程序無法運行”,這個問題好解決,找到你的matlab安裝文件下面的:D:\Program Files\MATLAB\R2012a\runtime\win32,注意,這個路徑隨每個人的安裝不同,記得修改,在這個文件夾裏面,你是不是看到了mclmcrrt7_17.dll這個文件呢,下面你只需要將這個文件所在的路徑添加在系統環境變量中就可以了,也就是將D:\Program Files\MATLAB\R2012a\runtime\win32添加到系統變量PATH的路徑中

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