2009-10-16 73 views
14

似乎有幾種方法可以在C++中調用matlab並在matlab中調用C++。雖然我試圖在這裏列出他們,但請指出如果我錯過了一些東西。在C C++和C中的matlab在matlab中的C++

要在MATLAB中調用C++,還有兩種方法。第一個是調用C共享庫中的函數。第二個是將C C++代碼編譯成二進制MEX文件,這些文件將在MATLAB命令行中調用。對於第一種方法,C共享庫是否只是一般的庫,即不改變它們用於matlab的C代碼並從通用C編譯器(如gcc)編譯?

要在C++中調用matlab代碼,有兩種方法可用。第一個是Matlab引擎。第二個是使用MATLAB Compiler mcc從MATLAB代碼創建C或C++共享庫。

除了matlab和C C++可以通過寫入和從某個文件(例如mat文件,文本文件)讀取數據進行通信。

有不止一種方法來實現這裏的每個目標,你能告訴我哪些情況最適合使用它們中的哪一個?即在C共享庫中調用函數VS將C C++代碼編譯爲二進制MEX文件,Matlab引擎VS將Matlab代碼編譯爲C C++共享庫。

感謝和問候!

+0

沒有語言叫做C/C++。 C和X之間的接口將比C++和X之間的接口容易得多。 – 2009-10-16 08:41:24

+11

你知道我的意思,「C和/或C++」 – Tim 2009-10-16 08:43:43

+1

C答案比C++答案短得多(在某些情況下,C++的答案將是「在C中編寫包裝」)。你更關心哪一個? – 2009-10-16 08:47:36

回答

8

我只有從MATLAB調用C或C++函數expraience。在我看來,共享庫中的調用函數與MEX文件中的調用函數之間唯一的區別在於,對於共享庫,您必須使用「calllib」調用該函數,該函數是命令行類型的函數,並且MEX函數允許你可以像調用內置函數一樣調用函數,這樣界面就更清潔了。

我的建議是使用MEX文件,如果

  • 您正在使用C++(您可能需要編寫一個包裝共享庫使用C++)
  • 您正在使用MATLAB作爲膠水大量優化的C或C++例程。你會希望能夠乾淨地給他們打電話。

使用共享庫,如果

  • 您已經擁有了可以不加修改地使用現有的C庫。
  • 您只需要少量的C函數調用。

真的,它歸結到界面。我個人更喜歡MEX文件路由,因爲它提供了從MATLAB到您的C或C++功能的最清潔的接口。你可以像使用標準MATLAB類型的另一個函數那樣調用它。隨着共享庫,你可能有調用庫函數

3

我想你已經命名的方法是正確的(它已經有一段時間,因爲我已經使用過)

的MATLAB的C編譯器是不是真的很特別;有可能使用不同的編譯器。請參閱link支持的編譯器列表。這不包括gcc,但包括MS Visual Studio。與提供的庫鏈接時會遇到問題。基本上來說:從C調用matlab是你要做的事情,如果你需要一個緊密的接口;例如如果你想同步2個工具,或者你的S函數(simulink)需要額外的信息。但是,這樣的文件首先被Matlab/simulink調用。

從matlab調用c是你想要做的,如果你寫自己的S函數或擴展到matlab。

C和C++之間的選擇是你的;如果你從一張空白紙開始,我建議你使用C++;你不需要使用完整的功能,但它允許更多的自由。現在還有更多的庫可用於C++。

如果您需要遷移到非常不同的環境,C語言是您的選擇;即例如將C編譯爲DSP。或者如果你已經有C中的遺留代碼來從頭開始。混合C和C++是可能的,但是可能有點麻煩;我相信你會在這個主題上找到關於StackOverflow的話題。

2

培訓視頻約用C在Matlab和Matlab使用C++ ++(波斯語)

內容之前,做一些數據格式:

1 - 簡介

  • Introduction.wmv [02:00,1.2 MB,800×600]

2 - C++在Matlab

  • 基本concepts.wmv [09:04,5.9 MB,800×600]
  • 配置和一個簡單的項目[8點25分,13 MB,800×600]
  • 樣品[02:17,2.7 MB,800×600]
  • 調試[2點38,3.4 MB,800×600]

3 - Matlab的在C++

  • Matlab的C++共享DLL.wmv [5點42,6.8 MB,800×600]
  • 從VC用Matlab ++ [10時52分,14.2 MB,800×600]

Watch or Download from Google

Download from 4Shared