當前位置:ag真人国际官网-ag旗舰厅官方网站 » 編程軟體 » matlab編譯c

matlab編譯c-ag真人国际官网

發布時間: 2024-02-09 19:28:45

㈠ matlab中如何運行c語言程序

呵呵,看來我們有研究相同的問題吧
matlab是一種科學的計算語言,採用的是解釋執行的方式,在配置比較水的機器(比如說我的),運行起來速度不敢恭維,但是他適合工程師用,快速建立起自己的運算平台,很多語法是類似c語言。你可以考察一下matlab的安裝目錄下extern下面lib庫中的函數,可以發現,有很多的c語言代碼,實際上,其內核有很多c的成分。
所以你應該可以明白了,可以運行,但是要把matlab的庫函數包含在c編譯庫中。
你完全可以在extern中的example中,在matlab環境下面運行幾個c代碼試一試,當然所採用的指令是mex(把c語言用於matlab中),mcc把matalb代碼轉化為c代碼,一些具體的參數,你可以用matlab強大的help工具獲得。我們還可以一起探討一下啊,給各郵箱之類的吧,呵呵,很樂意的

㈡ 請問在matlab中選擇vc6.0為編譯器的方法

1. 安裝
單獨安裝、和matlab同時安裝。
2. 設置(以vs2005為例)
>> mbuild -setup
please choose your compiler for building standalone matlab applications:

would you like mbuild to locate installed compilers [y]/n? y

select a compiler:
[1] lcc-win32 c 2.4.1 in d:\progra~1\matlab\r2010a\sys\lcc
[2] microsoft visual c 2008 sp1 in d:\program files\microsoft visual studio 9.0
[3] microsoft visual c 2005 sp1 in c:\program files\microsoft visual studio 8

[0] none

compiler: 3

please verify your choices:

compiler: microsoft visual c 2005 sp1
location: c:\program files\microsoft visual studio 8

are these correct [y]/n?

trying to update options file: c:\documents and settings\administrator\application data\mathworks\matlab\r2010a\compopts.bat
from template: d:\progra~1\matlab\r2010a\bin\win32\mbuildopts\msvc80compp.bat

done . . .

3. 使用
(1)在 matlab 環境中使用 mcc 命令;
(2)在系統命令環境中使用 mcc.exe (在windows上);
(3)在 matlab 環境中使用 deployment tool。
4. 程序發布
(1)使用 matlab 命令 builder;
(2)使用 deployment tool 圖形化工具。
一般來說,需要發布的文件有3個:
(1)編譯得到的可執行文件或庫函數;
(2)ctf 文件;
(3)mcrinstaller.zip。
在最終用戶的計算機上,首先需要把mcrinstaller.zip 解壓,並把 mcr 中可執行文件所在目錄添加到系統路徑上,然後就可以使用編譯後的程序了。

㈢ matlab mex 找不到編譯器怎麼辦

①選y後,matlab會列出當前機器上已經安裝的、且與當前matlab版本兼容的所有c編譯器,一般而言,matlab都會自帶一個lcc編譯器,然而lcc目渣消前僅支持32位的matlab,所以你的機器上沒有。

②選n後,matlab會列出所有與當前matlab版本兼容的c編譯器類型(不管你是否已經安裝,用於幫助用戶選擇合適的c編譯器),你機器上已經安裝的2個編譯器,vc6.0:matlab從r2010b之後不再支持,所以選項里看不到;而sdk7.1選n時可以看到([11]),但選y時沒有跳出,是因為matlab沒有正確定位sdk。

③解決方法:

方法一:如果以預設選項安裝了sdk7.1(不改變默認安裝路徑),可以嘗試輸入n後,選肢櫻擇 [14] (注意:是14,不是11!),強制定位該編譯器(網上有人用這種方法成功了:http://mlinking.blog.163.com/blog/static/185801922201331464626365/)

方法二:重新安裝matlab,安裝時選擇32位進行安裝,則自帶lcc編譯器。

方法三:選擇適配的vs版本,下載安裝後,重新配置mex命令。

㈣ 怎麼在matlab中調用用c語言編寫的程序

通過把耗時長的函數用c語言實現,並編譯成mex函數可以加快執行速度。matlab本身是不帶c語言的編譯器的,所以要求你的機器上已經安裝有vc,bc或watcom
c中的一種。如果你在安裝matlab時已經設置過編譯器,那麼現在你應該就可以使用mex命令來編譯c語言的程序了。如果當時沒有選,就在matlab里鍵入mex
-setup,下面只要根據提示一步步設置就可以了。需要注意的是,較低版本的在設置編譯器路徑時,只能使用路徑名稱的8字元形式。比如我用的vc裝在路徑c:\program
files\devstudio下,那在設置路徑時就要寫成:「c:\progra~1」這樣設置完之後,mex就可以執行了。為了測試你的路徑設置正確與否,把下面的程序存為hello.c。
/*hello.c*/
#include
"mex.h"
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
mexprintf("hello,world!\n");
}
假設你把hello.c放在了c:\test\下,在matlab里用cd
c:\test\
將當前目錄改為c:\
test\(注意,僅將c:\test\加入搜索路徑是沒有用的)。現在敲:
mex
hello.c
如果一切順利,編譯應該在出現編譯器提示信息後正常退出。如果你已將c:\test\加
入了搜索路徑,現在鍵入hello,程序會在屏幕上打出一行:
hello,world!
看看c\test\目錄下,你會發現多了一個文件:hello.dll。這樣,第一個mex函數就算完成了。分析hello.c,可以看到程序的結構是十分簡單的,整個程序由一個介面子過程
mexfunction構成。
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
前面提到過,matlab的mex函數有一定的介面規范,就是指這
nlhs:輸出參數數目
plhs:指向輸出參數的指針
nrhs:輸入參數數目
例如,使用
[a,b]=test(c,d,e)
調用mex函數test時,傳給test的這四個參數分別是
2,plhs,3,prhs
其中:
prhs[0]=c
prhs[1]=d
prhs[2]=e
當函數返回時,將會把你放在plhs[0],plhs[1]里的地址賦給a和b,達到返回數據的目的。
細心的你也許已經注意到,prhs[i]和plhs[i]都是指向類型mxarray類型數據的指針。
這個類型是在mex.h中定義的,事實上,在matlab里大多數數據都是以這種類型存在。當然還有其他的數據類型,可以參考apiguide.pdf里的介紹。
為了讓大家能更直觀地了解參數傳遞的過程,我們把hello.c改寫一下,使它能根據輸
入參數的變化給出不同的屏幕輸出:
//hello.c
2.0
#include
"mex.h"
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
int
i;
i=mxgetscalar(prhs[0]);
if(i==1)
mexprintf("hello,world!\n");
else
mexprintf("大家好!\n");
}
將這個程序編譯通過後,執行hello(1),屏幕上會打出:
hello,world!
而hello(0)將會得到:
大家好!
現在,程序hello已經可以根據輸入參數來給出相應的屏幕輸出。在這個程序里,除了用到了屏幕輸出函數mexprintf(用法跟c里的printf函數幾乎完全一樣)外,還用到了一個函數:mxgetscalar,調用方式如下:
i=mxgetscalar(prhs[0]);
"scalar"就是標量的意思。在matlab里數據都是以數組的形式存在的,mxgetscalar的作用就是把通過prhs[0]傳遞進來的mxarray類型的指針指向的數據(標量)賦給c程序里的變數。這個變數本來應該是double類型的,通過強制類型轉換賦給了整形變數i。既然有標量,顯然還應該有矢量,否則矩陣就沒法傳了。看下面的程序:
//hello.c
2.1
#include
"mex.h"
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
int
*i;
i=mxgetpr(prhs[0]);
if(i[0]==1)
mexprintf("hello,world!\n");
else
mexprintf("大家好!\n");
}
這樣,就通過mxgetpr函數從指向mxarray類型數據的prhs[0]獲得了指向double類型的指針。
但是,還有個問題,如果輸入的不是單個的數據,而是向量或矩陣,那該怎麼處理呢
?通過mxgetpr只能得到指向這個矩陣的指針,如果我們不知道這個矩陣的確切大小,就
沒法對它進行計算。
為了解決這個問題,matlab提供了兩個函數mxgetm和mxgetn來獲得傳進來參數的行數
和列數。下面常式的功能很簡單,就是獲得輸入的矩陣,把它在屏幕上顯示出來:
//show.c
1.0
#include
"mex.h"
#include
"mex.h"
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
double
*data;
int
m,n;
int
i,j;
data=mxgetpr(prhs[0]);
//獲得指向矩陣的指針
m=mxgetm(prhs[0]);
//獲得矩陣的行數
n=mxgetn(prhs[0]);
//獲得矩陣的列數
for(i=0;i{
for(j=0;jmexprintf("%4.3f
",data[j*m i]);
mexprintf("\n");
}
}
編譯完成後,用下面的命令測試一下:
a=1:10;
b=[a;a 1];
show(a)
show(b)
需要注意的是,在matlab里,矩陣第一行是從1開始的,而在c語言中,第一行的序數為零,matlab里的矩陣元素b(i,j)在傳遞到c中的一維數組大data後對應於data[j*m i]

輸入數據是在函數調用之前已經在matlab里申請了內存的,由於mex函數與matlab共用同一個地址空間,因而在prhs[]里傳遞指針就可以達到參數傳遞的目的。但是,輸出參數卻需要在mex函數內申請到內存空間,才能將指針放在plhs[]中傳遞出去。由於返回指針類型必須是mxarray,所以matlab專門提供了一個函數:mxcreatedoublematrix來實現內存的申請,函數原型如下:
mxarray
*mxcreatedoublematrix(int
m,
int
n,
mxcomplexity
complexflag)
m:待申請矩陣的行數
n:待申請矩陣的列數
為矩陣申請內存後,得到的是mxarray類型的指針,就可以放在plhs[]里傳遞回去了。但是對這個新矩陣的處理,卻要在函數內完成,這時就需要用到前面介紹的mxgetpr。使用
mxgetpr獲得指向這個矩陣中數據區的指針(double類型)後,就可以對這個矩陣進行各種操作和運算了。下面的程序是在上面的show.c的基礎上稍作改變得到的,功能是將輸
//reverse.c
1.0
#include
"mex.h"
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
double
*indata;
double
*outdata;
int
m,n;
int
i,j;
indata=mxgetpr(prhs[0]);
m=mxgetm(prhs[0]);
n=mxgetn(prhs[0]);
plhs[0]=mxcreatedoublematrix(m,n,mxreal);
outdata=mxgetpr(plhs[0]);
for(i=0;ifor(j=0;joutdata[j*m i]=indata[(n-1-j)*m i];
}
當然,matlab里使用到的並不是只有double類型這一種矩陣,還有字元串類型、稀疏矩陣、結構類型矩陣等等,並提供了相應的處理函數。本文用到編制mex程序中最經常遇到的一些函數,其餘的詳細情況清參考apiref.pdf。
通過前面兩部分的介紹,大家對參數的輸入和輸出方法應該有了基本的了解。具備了這些知識,就能夠滿足一般的編程需要了。但這些程序還有些小的缺陷,以前面介紹的re由於前面的常式中沒有對輸入、輸出參數的數目及類型進行檢查,導致程序的容錯性很差,以下程序則容錯性較好
#include
"mex.h"
void
mexfunction(int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
double
*indata;
double
*outdata;
int
m,n;
//異常處理
//異常處理
if(nrhs!=1)
mexerrmsgtxt("usage:
b=reverse(a)\n");
if(!mxisdouble(prhs[0]))
mexerrmsgtxt("the
input
matrix
must
be
double!\n");
indata=mxgetpr(prhs[0]);
m=mxgetm(prhs[0]);
n=mxgetn(prhs[0]);
plhs[0]=mxcreatedoublematrix(m,n,mxreal);
outdata=mxgetpr(plhs[0]);
for(i=0;ifor(j=0;joutdata[j*m i]=indata[(n-1-j)*m i];
}
在上面的異常處理中,使用了兩個新的函數:mexerrmsgtxt和mxisdouble。mexerrmsgtxt在給出出錯提示的同時退出當前程序的運行。mxisdouble則用於判斷mxarray中的數據是否double類型。當然matlab還提供了許多用於判斷其他數據類型的函數,這里不加詳述。
需要說明的是,matlab提供的api中,函數前綴有mex-和mx-兩種。帶mx-前綴的大多是對mxarray數據進行操作的函數,如mxisdouble,mxcreatedoublematrix等等。而帶mx前綴的則大多是與matlab環境進行交互的函數,如mexprintf,mxerrmsgtxt等等。了解了這一點,對在apiref.pdf中查找所需的函數很有幫助。
至此為止,使用c編寫mex函數的基本過程已經介紹完了。

㈤ 請教關於利用matlab中「mex」命令編譯c程序的問題

1.准備好c語言程序,清楚c語言的入口函數
2.編寫mexfunction函數。mexfunction函數為c語言與matlab語言的介面函數。調用實例在mylinedetect.c文件中.在matlab中調用mex指令編譯相關文件,將c語言編譯為mex文件。
3.編譯完成後,生成mylinedetect.mexw32或mylinedetect.mexw64文件,此文件即mex文件,用於matlab與c語言介面函數.
4.編譯完成之後,編寫matlab函數,調用mex文件。以mex文件的形式調用編譯完成的c語言函數[o1,o2]=mylinedetect(double(x).');......
5.輸出結果,上述linedetect函數完成圖像中直線檢測功能,帶入matlab中調用後形成結果。

㈥ 如何將matlab程序編譯成exe文件

我也是最近才搞定的這個問題,按下述步驟進行,就沒有問題,我已經運行成功,但是遇到你程序的bug的話,便會出現錯誤,關閉整個程序x0dx0a希望這些對你有用x0dx0ax0dx0a如何將matlab程序編譯成獨立可執行的程序?如何將編譯好的獨立可執行程序發布在沒有安裝matlab的電腦上?下面將一步步實現:x0dx0ax0dx0a一、生成獨立可執行的程序(exe文件)步驟x0dx0ax0dx0a 1、安裝編譯器。可有多種選擇,matlab自帶了一個lcc,推薦使用vc 6.0,我基於vs 2003實現。x0dx0a 2、設置編譯器。在matlab命令行輸入mbuild _setup以及mex _setup,選擇安裝的c編譯器。x0dx0a 3、調用編譯器。此處使用matlab下的一個gui平台deploytool下完全實現。在命令窗口輸入deploytool即可看到。具體使用方法請help。x0dx0a當然,也可以輸入mcc -m filaname, filaname為要轉成exe的m文件;x0dx0a註:在以前的版本中,用編譯命令mcc -b sglcpp filaname;自2006的版本後,替換為mcc -mfilaname;x0dx0a 4、安裝\toolbox\compiler\deploy\win32目錄下的mcrinstaller。x0dx0ax0dx0a二、脫離matlab運行可執行程序x0dx0amcr是由matlab的運行環境,佔用不到300m的對於用不同matlab版本生成的exe文件,mcr版本也會有不同,因此,在程序打包時,最好將相應版本的mcr一起打包。mcr環境的設置文件存放目錄如下:x0dx0a \toolbox\compiler\deploy\win32x0dx0a文件名為mcrinstaller.exe。可將其拷貝到自己的文件夾中,(7.0以前的版本是mglinstaller.exe)。x0dx0a在matlab里運行可執行程序的辦法是在前面加一個!,比如:!picshow,後綴名可有可無。x0dx0a在其它沒有安裝matlab的機器上運行exe文件前:x0dx0a首先安裝matlab的運行環境。在同一機器上可以並存不同版本的matlab環境(換句話說不同版本不兼容)。x0dx0a其次是要將「mcrinstaller.exe安裝目錄\runtime\win32」這個路徑添加到該計算機的環境變數中,通常是自動載入。x0dx0a如果沒有,也可手動安裝,添加的方法是:x0dx0a右擊「我的電腦」「屬性」「高級」「環境變數」「添加」指定一個變數名,然後將上述路徑復制到裡面就可以了。x0dx0a註:在安裝過程中會彈出讓安裝microsoft.netframework可以不用安裝。x0dx0a最後就是將編譯生成的相相關文件拷貝到同一目錄下,雙擊即可運行。x0dx0a問題:目前此方法可完全運行在沒有安裝matlab以及c/c 的電腦上,但是如果是在amd的cpu可以運行,但是不會出現任何matlab編譯的界面。x0dx0a美中不足就是,運行的時候dos的那個黑色地窗口一直存在。下面將實現去除黑屏的辦法:x0dx0ax0dx0a消除運行matlab生成的exe程序的dos黑屏的辦法x0dx0a基於matlab生成exe文件後,每次運行都存在dos黑屏的問題,現在可以通過以下方法解決:x0dx0a方法一: 在命令窗口輸入:x0dx0acd(prefdir) x0dx0aedit compopts.batx0dx0a在打開的文件最後添加以下語句:x0dx0ax0dx0aa.vc環境下:x0dx0ax0dx0a set linkflags=%linkflags%/subsystem:windows /entry:maincrtstartup x0dx0ax0dx0ab.lcc環境下:x0dx0a set linkflags=%linkflags% -subsystemwindows

㈦ 怎樣把matlab程序轉化成c語言程序

可以用matlab的c 編譯器生成轉換m語言為c語言,首先得安裝編譯器,然後用下面語句來轉換mcc -m yourfile.m -c

㈧ 如何將matlab程序編譯成獨立可執行的程序

一、生成獨立可執行的程序(exe文件)步驟

1、安裝編譯器。可有多種選擇,matlab自帶了一個lcc,推薦使用vc 6.0,我基於vs 2003實現。

2、設置編譯器。在matlab命令行輸入mbuild –setup以及mex –setup,選擇安裝的c編譯器。

3、調用編譯器。此處使用matlab下的一個gui平台deploytool下完全實現。在命令窗口輸入deploytool即可看到。具體使用方法請help。
當然,也可以輸入mcc -m filaname, filaname為要轉成exe的m文件;
註:在以前的版本中,用編譯命令mcc -b sglcpp filaname;自2006的版本後,替換為mcc
-mfilaname;

4、安裝path>\toolbox\compiler\deploy\win32目錄下的mcrinstaller。

二、脫離matlab運行可執行程序
mcr是由matlab的運行環境,佔用不到300m的對於用不同matlab版本生成的exe文件,mcr版本也會有不同,因此,在程序打包時,最好將相應版本的mcr一起打包。mcr環境的設置文件存放目錄如下:


\toolbox\compiler\deploy\win32
文件名為mcrinstaller.exe。可將其拷貝到自己的文件夾中,(7.0以前的版本是mglinstaller.exe)。
在matlab里運行可執行程序的辦法是在前面加一個!,比如:!picshow,後綴名可有可無。
在其它沒有安裝matlab的機器上運行exe文件前:
首先安裝matlab的運行環境。在同一機器上可以並存不同版本的matlab環境(換句話說不同版本不兼容)。
其次是要將「mcrinstaller.exe安裝目錄\runtime\win32」這個路徑添加到該計算機的環境變數中,通常是自動載入。
如果沒有,也可手動安裝,添加的方法是:
右擊「我的電腦」「屬性」「高級」「環境變數」「添加」指定一個變數名,然後將上述路徑復制到裡面就可以了。
註:在安裝過程中會彈出讓安裝microsoft.netframework可以不用安裝。
最後就是將編譯生成的相相關文件拷貝到同一目錄下,雙擊即可運行。
問題:目前此方法可完全運行在沒有安裝matlab以及c/c 的電腦上,但是如果是在amd的cpu可以運行,但是不會出現任何matlab編譯的界面。
美中不足就是,運行的時候dos的那個黑色地窗口一直存在。下面將實現去除黑屏的辦法:

消除運行matlab生成的exe程序的dos黑屏的辦法
基於matlab生成exe文件後,每次運行都存在dos黑屏的問題,現在可以通過以下方法解決:
方法一: 在命令窗口輸入:
cd(prefdir)
edit compopts.bat
在打開的文件最後添加以下語句:

a.vc環境下:

set
linkflags=%linkflags%/subsystem:windows /entry:maincrtstartup

b.lcc環境下:
set linkflags=%linkflags%
-subsystemwindows

c. borland:

set linkflags=%linkflags% -aa

保存以後,再重新編譯m文件,生成的exe文件運行起來就沒有dos窗口了

方法二:使用suppress工具:
下載附件中的suppress壓縮包後解壓,(當然您可以自己去google然後再下載)會看到一個suppress.ini文件,用記事本打開,然後將
其中「name=test.exe」中text.exe的改為你生成的exe文件名。將suppress.exe(有個關盤和顯示器的圖標),改後的
suppress.ini放到你生成的exe的同目錄下。執行suppress.exe或者您自己生成的exe可以了。當然您可以自己修改
suppress.exe的名字,改為您自己想要的名字。

其中的方法一在使用後生成的exe再到沒有任何安裝matlab的機子上運行也不會有黑屏了。
方法二的缺點就是要同時存在您生成的exe以及supress.exe,必須在同一目錄下。

熱點內容
androidapk版本號 發布:2024-02-10 00:04:16 瀏覽:990
培訓學校源碼 發布:2024-02-09 23:57:28 瀏覽:687
pythonifaandb 發布:2024-02-09 23:36:26 瀏覽:264
javarsa私鑰加密 發布:2024-02-09 23:36:17 瀏覽:239
python證書微軟認證 發布:2024-02-09 23:34:27 瀏覽:999
wlan沒有ip配置怎麼解決 發布:2024-02-09 23:24:19 瀏覽:532
javatoexe 發布:2024-02-09 22:48:53 瀏覽:418
路由器撥號賬號密碼在哪裡 發布:2024-02-09 22:29:30 瀏覽:164
ssd緩存是什麼 發布:2024-02-09 22:00:12 瀏覽:626
簡單游腳本試用破解 發布:2024-02-09 21:42:34 瀏覽:41
网站地图