Tạo file .exe trong Matlab dùng Matlab Compiler

Có nhiều bạn khá băn khoăn về việc dịch một ứng dụng trong Matlab ra file .exe để chạy độc lập trên các máy không cài Matlab đúng không ?? Hay là cách để đóng gói sản phẩm của mình thì nên làm thế nào ?

Để có thể dịch ra file .exe yêu cầu bạn phải có toolbox MATLAB® Compiler™. Các bạn có thể xem chi tiết về toolbox này và cách dùng nó tại đây. Mình nghĩ là nó hướng dẫn quá đầy đủ về Matlab Compiler, các bạn chịu khó đọc từ đầu đến cuối là được. Các bạn đã cài bộ Help cho Matlab có thể tìm Toolbox này trong phần Help (nhấn F1).

Trong bài viết này, mình xin giới thiệu cách tạo file .exe bằng Deployment Tool. Công cụ giao diện thân thiện, không phải gõ lệnh, chỉ gắp thả là được.

Yêu cầu

Matlab 7.0 trở lên (vì mình test từ 7.0 smile_teeth ).

Bước 1: Chọn công cụ biên dịch C

Note: Bước này chỉ cần thực hiện 1 lần duy nhất ban đầu, nếu muốn chọn công cụ biên dịch khác thì chạy lại bước này.

>> 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 C:\PROGRA~1\MATLAB\R2007b\sys\lcc [2] Microsoft Visual C++ 2005 in C:\Program Files\Microsoft Visual Studio 8   [0] None   Compiler: 1  Please verify your choices:   Compiler: Lcc-win32 C 2.4.1 Location: C:\PROGRA~1\MATLAB\R2007b\sys\lcc   Are these correct?([y]/n): y  Trying to update options file: C:\Documents and Settings\Ngo Hai Bac\Application Data\MathWorks\MATLAB\R2007b\compopts.bat From template:              C:\PROGRA~1\MATLAB\R2007b\bin\win32\mbuildopts\lcccompp.bat   Done . . .   >>

Như các bạn thấy chúng ta chỉ cần chọn công cụ biên dịch C có sẵn của Matlab là được rồi (Lựa chọn 1).

Bước 2: Chạy công cụ Development Tool

Gõ lệnh:

>> deploytool

Khi đó, giao diện của chương trình Deployment Tool hiện ra:

Hình 1: Giao diện chương trình Deployment Tool

Từ cửa sổ của chương trình các bạn có thể làm theo hướng dẫn của chương trình được rồi.

Vào menu File chọn New Deployment Project hoặc kich vào icon trên thanh công cụ.

Hình 2: New Deployment Tool

Từ đây các bạn có nhiều lựa chọn cho việc dịch project của bạn không những dịch ra file .exe mà còn nhiều loại file khác như tạo thư viện C, C++, thư viện để nhúng vào Excel, ... Nhưng ở đây mình chọn Standalone Application để tạo ứng dụng độc lập. Chọn nơi lưu project trong Location và nhấn OK.

Hình 3: Cửa sổ Deployment Tool sau khi đã tạo mới Project

Sau đó các bạn vào menu Project -> Add file để thêm file của dự án các bạn vào. Lưu ý: có thể kích phải vào từng loại như Main Function, other files,.. và chọn Add File.

Note: Phải thêm hết các file trong dự án mà bạn muốn dịch vào trong Project vừa tạo.

Bước 3: Dịch chương trình

Nếu muốn dịch thì các bạn chọn Tools -> Build (Ctr + B) để dịch. Các bạn phải kiên nhẫn chờ với project lớn nhé.

Nếu muốn đóng gói sản phẩn thì chọn Tools-> Package (Ctr + P) để dịch.

Note: Thế là các bạn đã dịch xong rùi đó . Tuy nhiên để chạy dc trên máy khác chưa xong đâu. Các bạn cần phải copy file MCRInstaller.exe của phiên bản Matlab của bạn đang sử dụng cho vào cùng thư mục với file đóng gói vừa tạo ra. Khi mang sang máy khác thì chạy file .exe nó sẽ tự động cài MCR lần đầu. Còn lấn sau k phải cài nữa.

Để biết vị trí của MCRInstaller:

>> mcrinstaller The WIN32 MCR Installer, version 7.7, is:     C:\Program Files\MATLAB\R2007b\toolbox\compiler\deploy\win32\MCRInstaller.exe  MCR installers for other platforms are located in:     C:\Program Files\MATLAB\R2007b\toolbox\compiler\deploy\<ARCH>   <ARCH> is the value of COMPUTER('arch') on the target machine.

Để biết version của MCR hiện tại gõ:

>> [mcrmajor,mcrminor]=mcrversion  mcrmajor =       7  mcrminor =       7

Chú ý: Copy MCRInstaller cùng với thư mục các bạn để file package. Khi đó, chạy file package thì nó sẽ tự cài MCRInstaller.

Mình đã biên dịch và chạy thành công Project RS232 Communication chạy độc lập trên máy không cài Matlab.

Tham khảo

Bài viết được biên soạn lại trên cơ sở bài viết đã post ở các diễn đàn điện tử của mình để các bạn tham khảo dễ dàng hơn.

Ngô Hải Bắc, Tạo file .exe trong Matlab, www.dientuvietnam.net

Ngô Hải Bắc, Giao tiếp RS232 trên PC qua Matlab, www.picvietnam.com

{ 42 comments… add one }
  • Le Phuong Ly April 18, 2008, 10:41 am

    hello Hai Bac, minh dang test thu tao file .exe theo huong dan cua ban, nhung gap van de la:
    >> deploytool
    ??? Undefined function or variable ‘deploytool’.
    Minh dung matlab 7.0
    Mong nhan dc su giup do cua ban, minh cung dang lap trinh matlab trong xu ly tieng noi,minh muon hoi ban 1 so van de nua,ko bit co dc ko? Chuc 1 ngay vui ve?

    Reply
  • admin April 18, 2008, 11:57 am

    Chào bạn.

    Mình hiện tại đang dùng bản Matlab R2007a. Hồi trước mình làm hướng dẫn ở trên dientuvietnam.net thì dùng bản R2007b. Có lẽ là bản 7.0 chưa có deploytool rồi. Vậy thì bạn đành phải gõ lệnh để biên dịch thôi, bạn xem help ở toolbox Matlab Compiler nhé.

    Tốt nhất bạn nên mua cái đĩa MatlabR2007b hoặc bản mới nhất R2008a mà dùng cho thích bạn ạ :D.

    Bạn cứ đặt câu hỏi đi, nếu mình biết thì sẽ trả lời mà.

    Chúc bạn thành công.

    Reply
  • Le Phuong Ly April 22, 2008, 12:24 pm

    Chào bạn, cám ơn bạn nhiều.
    Hiện mình làm đồ án lập trình bằng matlab. Công việc là thu âm, hiển thị dạng sóng tín hiệu, ảnh phổ(spectrogram) và phân tích phổ tín hiệu. Chỉ có một vấn đề mình làm chưa làm được là cần có thanh chọn một đoạn tín hiệu ổn định nhất trong figure hiển thị dạng sóng để phân tích phổ của nó. Bạn có lời khuyên nào cho mình không? Hi vọng sớm nhận được câu trả lời của bạn.
    Chúc bạn một tuần mới vui vẻ học tập và làm việc hiệu quả.

    Reply
  • admin April 22, 2008, 12:38 pm

    Chào bạn.

    Mình nghĩ vấn đề của bạn cũng không quá khó, bởi vì khi bạn đã xuất dữ liệu ra figure thì bạn đã có hàm y = f(x) rồi. Do đó, công việc của cái thanh chọn đó có thể dùng Slidebar, chính là chọn giá trị x trên cơ sở quan sát hình ảnh trên figure.

    Có thể,đơn giản bạn dụng một hộp EditBox, gõ khoảng giá trị x mà bạn thấy ổn định nhất để phân tích phổ.

    Nếu dùng Sidebar, mình nghĩ bạn sẽ dịch một đoạn dữ liệu của x = khoảng nào đó có độ dài nhất định tùy bạn chọn, trượt theo giá trị x, trong khi đó, một hàm ngắt của sidebar có nhiệm vụ hiển thị phổ của cái này ra một figure khác. Chắc cái này trực quan hơn.

    Ví dụ: chọn giá trị delta = 1:0.1:2; chẳng hạn.
    và value là giá trị vị trí của thanh trượt chẳng hạn.

    Thì khoảng giá trị cần lấy = delta .+ value;

    Chúc bạn thành công.

    Reply
  • hung_dtvt April 26, 2008, 1:44 am

    Thế sau khi làm GUI xong muốn chuyển sang file .exe thì làm như hướng dẫn trên được không a?

    Reply
  • admin April 26, 2008, 1:46 am

    Chào em.

    Chuyển được mà. Để lúc nào anh upload cái project lập trình giao tiếp RS232 bằng GUI đã chuyển qua file .exe cho mà xem.

    Chạy ngon lành luôn.

    Reply
  • hung_dtvt April 26, 2008, 1:49 am

    Úi e chưa biết làm thế nào, a up cái file exe lên thì e xem cũng có hiểu j đâu chứ.Hehe

    Reply
  • admin April 26, 2008, 1:52 am

    Đơn giản ấy mà. Em cứ làm theo bước trên. Add hết mọi file mà project đó của em dùng là nó tự dịch mà.

    Không sợ đâu. Mỗi tội chờ hơi lâu lâu tí.

    Reply
  • hung_dtvt April 26, 2008, 1:59 am

    Ohm vâng cảm ơn anh. Để mai thử làm coi sao.Hehe

    Reply
  • Le Phuong Ly April 29, 2008, 2:15 pm

    chào bạn,
    bạn chạy demo toolboxes => signal processing => spectral analysis statistical signal processing => spectrogram demo. Bạn xem ở đó nó có 2 thanh trượt, mình muốn đưa thanh trượt đó vào chương trình của mình, vậy phải làm thế nào?hichic…nghĩ mãi mà chưa ra, chán wa’.
    Chúc bạn tuần mới vui vẻ!

    Reply
  • Kalina May 10, 2008, 8:15 pm

    Chào Bắc ! bạn ơi, mình dùng bản 7.5 mà cái lệnh deploytool cũng ko dùng được, bây giờ làm thế nào ! Mình đang rất cần, cám ơn 🙁

    Reply
  • Kalina May 15, 2008, 10:46 am

    Bắc à! Mình đã cài lại tuy nhiên đã cài phần Toolbox Complier rồi, nhưng vẫn không làm được, hay mình phải dùng ko đúng bản matlab nhỉ, bản 7.1 cơ mà.
    lỗi này này :
    “>> deploytool
    ??? Undefined function or variable ‘deploytool’.”

    Reply
  • Lamhpvn May 21, 2008, 6:29 am

    Bạn cho hỏi, mình đang tìm cách cài đặt mcrinstaller trên máy người sử dụng. (Để chạy bộ đóng gói của mình) Nhưng không biết tìm bộ cài ở đâu? Mình dùng bản 2007a.
    Cảm ơn bạn!

    Reply
  • hungnguyen June 13, 2008, 4:23 am

    Phần trình bày của bạn rất hay! Mình dang cần nên xin sử dụng phần này của bạn!

    Reply
  • Lê Minh Huy September 2, 2008, 8:10 pm

    Anh cho e hỏi : Sau khi xuất ra các file và sử dụng lệnh trong môi trường c++ thì tốc độ thực thi lệnh so với dùng trong môi trường matlab thế nào?

    Reply
  • Nguyễn Duy Khiêm October 5, 2008, 6:36 am

    Em đã thử làm theo tất cả các bước, gõ đầy đủ các lệnh rồi. EM đã add cái file .mdl của em vào Project, nhưng cuối cùng em không thể Build đựoc vì nút build vẫn bị ẩn , em thử vào menu Tools–> Build cũng thấy nó bị ẩn. Em đã Undock cái cửa sổ để nó thành một cửa sổ riêng nhưng tình hình không cải thiện. File .mdl của em chạy ngon, không có vấn đề gì, chạy độc lập không cần M-file.Em đã thử làm nhiều Project khác với các fiel mdl khác nhưng vẫn bị. ANh xem giúp em sai ở đâu nhé!

    Reply
  • Nguyễn Duy Khiêm October 5, 2008, 6:55 am

    EM đã post hình lên dientuvetnam.net, vì em chưa có tài khoản hotmail nên em lười post ảnh lên Skydriver. ANh có thời gian thì xem hộ em nhé, cám ơn anh.
    http://dientuvietnam.net/forums/showthread.php?p=137264#post137264
    http://dientuvietnam.net/forums/showthread.php?p=137264#post137264

    Reply
  • Nguyễn Duy Khiêm October 5, 2008, 6:59 am

    >> mbuild -setup
    mbuild -setup
    Please choose your compiler for building standalone MATLAB applications:

    Would you like mbuild to locate installed compilers [y]/n? mbuild -setup

    Select a compiler:
    [1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2008a\sys\lcc

    [0] None

    Compiler: 1

    Please verify your choices:

    Compiler: Lcc-win32 C 2.4.1
    Location: C:\PROGRA~1\MATLAB\R2008a\sys\lcc

    Are these correct [y]/n? y

    Trying to update options file: C:\Documents and Settings\User\Application Data\MathWorks\MATLAB\R2008a\compopts.bat
    From template: C:\PROGRA~1\MATLAB\R2008a\bin\win32\mbuildopts\lcccompp.bat

    Done . . .

    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 C:\PROGRA~1\MATLAB\R2008a\sys\lcc

    [0] None

    Compiler: 1

    Please verify your choices:

    Compiler: Lcc-win32 C 2.4.1
    Location: C:\PROGRA~1\MATLAB\R2008a\sys\lcc

    Are these correct [y]/n? y

    Trying to update options file: C:\Documents and Settings\User\Application Data\MathWorks\MATLAB\R2008a\compopts.bat
    From template: C:\PROGRA~1\MATLAB\R2008a\bin\win32\mbuildopts\lcccompp.bat

    Done . . .

    >> deploytool
    >> mcrinstaller
    The WIN32 MCR Installer, version 7.8, is:
    C:\Program Files\MATLAB\R2008a\toolbox\compiler\deploy\win32\MCRInstaller.exe

    MCR installers for other platforms are located in:
    C:\Program Files\MATLAB\R2008a\toolbox\compiler\deploy\
    is the value of COMPUTER(‘arch’) on the target machine.

    Full list of available MCR installers:
    C:\Program Files\MATLAB\R2008a\toolbox\compiler\deploy\win32\MCRInstaller.exe

    For more information, read your local MCR Installer help.
    Or see the online documentation at The MathWorks’ web site. (Page may load slowly.)
    >>

    Reply
  • Nguyễn Duy Khiêm October 5, 2008, 10:32 pm

    Cám ơn anh Bắc, hóa ra file .mdl không build được hả anh? Thế thì gay thật,làm sao mà em mang cái file .mdl của em đi báo cáo thầy hướng dẫn khi mà thầy dùng bản Matlab cũ hơn bản của em?

    Giải pháp cho file .mdl ? 😐 ❓ ❓ ❓

    http://dientuvietnam.net/forums/showthread.php?t=17763

    Reply
  • vinhgt April 21, 2009, 9:46 am

    Xin Chào anh Bắc. e đang làm bài tập mô phỏng dao động về động lực học Phanh otô. Anh giúp chỉ e cách tạo Gui và Figure để tạo nên một Giao diện có MENU sổ xuống để nhập các thông số đầu vào, nhằm vẽ được môt đồ thị mô phỏng.
    Anh cố gắn giúp em nha. và gởi về địa chỉ email của em.
    Em cảm ơn Anh nhiêu!

    Reply
    • ngohaibac April 21, 2009, 4:26 pm

      Anh không có nhiều thời gian, nên chỉ có thể nói hướng cho em làm thôi. Còn em muốn nhận hỗ trợ, giàm thời gian nghiên cứu thì đăng ký tại http://www.hocdelam.org/vn nhé.

      Các cái về menu, … anh đều đã nói ở trong site này rồi em ạ.

      Chúc em thành công.

      Reply
  • khai June 7, 2009, 10:58 pm

    Mình hỏi chút. Mình tạo được file exe rồi nhưng sao dung lượng nó lớn thế nhỉ (~250M)? Liệu như vậy có là bình thường không? Mã nguồn của mình dài 70 dòng, chỉ là nhập liệu, tính toàn đa thức rồi xuất dữ liệu.

    Reply
    • ngohaibac June 8, 2009, 7:47 am

      Cái file bạn tạo là file package chứa cả file cài đặt môi trường Matlab rồi: MCRInstaller.exe đó. Nếu bạn chỉ biên dịch thôi thì file .exe rất nhỏ thôi, tuy nhiên vác đi máy khác k chạy được đâu.

      Bạn cần phải copy cả file MCRInstaller.exe nữa đó.

      Chúc bạn thành công.

      Reply
  • trandacchautoan June 14, 2010, 2:18 am

    trong matlab R2008a nó báo ko có deploytool giờ phải làm sao anh chẳng lẽ phải gỡ ra cái R2008b 2G hả :(( :((

    Reply
    • ngohaibac June 15, 2010, 11:46 pm

      Gỡ ra và cài lại từ đầu.

      Reply
  • Sonnh August 12, 2010, 4:24 pm

    Cảm ơn Bác Ngô Hải Bắc đã trình bày rất chi tiết. Em đã tạo được file.exe và file package(bao gồm cả file MCRInstaller.exe) xong chỉ chạy được trên máy của mình. Khi copy sang máy khác thì không chạy được. Các Bác chỉ giúp E với.?

    Reply
  • long May 19, 2011, 10:14 pm

    em dùng Matlab R2008a cũng làm tạo file.exe như anh Bắc bảo , nhưng không hiểu sao dịch đc rồi mà khi chạy file.exe đó thì lại không đc ? anh Bắc có biết nguyên nhân là gì không ạ ?

    Reply
  • dinhhop January 10, 2012, 3:50 pm

    anh ơi cho em hỏi, em làm về thủy vân ảnh, mà dùng hàm rand(‘state’,key);
    mà sao nó cứ báo như thế này thì là sao ah, cách khắc phục ntn ạ.

    ??? Error using ==> rand
    State must be scalar or 35-by-1.

    Error in ==> taotvDWT at 22
    rand(‘state’,key);

    Mong anh chỉ giúp.thanks A nhiều!

    Reply
  • dinhhop January 10, 2012, 3:56 pm

    Anh admin ơi, cho em hỏi chút ạ, em dùng hàm Rand(‘state’,key); trong Matlab7.0 mà sao nó cua báo thế này:
    ??? Error using ==> rand
    State must be scalar or 35-by-1.

    Error in ==> taotvDWT at 22
    rand(‘state’,key);

    thì có nghĩa là gì ạ, và sửa như thế nào ạ,mong a chỉ giúp ạ,Em cảm ơn nhiều.

    Reply
  • sara April 11, 2012, 7:26 am

    I have a problem to make a package file. I create a file by guide. I would like to package it. I done following your instruction on this website. However, when I run, it only shows the figures. After I input parameters by hand, It doesn’t work well. So, what is problem? This instruction only apply to .m file without file maden by guide?

    Reply
  • Mai Viet Tung November 22, 2012, 1:08 am

    anh ơi anh có thể định ngĩa bố cục và định ngĩa các hàm trong guis viết thế nào không anh. tác dụng của các hàm với lại các phần của một chương trình guis hộ em với. anh gửi qua mail cho em nha anh. thank anh nhiều

    Reply
  • Sinh November 22, 2013, 5:28 pm

    ad cho mình hỏi mình chạy lệnh mbuild -setup nhưng ghi gõ y nó chỉ có lựa chọn là Visual Stufio 2010 mà không có Lcc gì đó vậy có sao không?
    Mình build vẫn bình thường nhưng khi chạy file .exe của mình thì chương trình không chạy được các chức năng trong file.m của mình là tại sao vậy ad có liên quan đến vấn đề trên ko?

    Reply
  • tien May 20, 2014, 4:57 pm

    chào ad mình làm về ứng dung mang nơron điều khiên công suất trong W-CDMA, khi chay Matlab thi găp lôi:
    ??? Undefined function or method ‘initlin’ for input arguments of type ‘double’.

    Error in ==> ra at 4
    [w,b] = initlin(P,T)
    Mong giup đỡ

    Reply
  • Long May 12, 2015, 3:25 pm

    Khi thiết kế Gui trong MatLab nhưng khi Run thì không thấy các ô thiết kế mà chỉ thấy một dao diện trong suốt hiện ra là sao? Nhờ anh, em giúp với! Thanks.

    Reply
  • hậu October 30, 2017, 10:27 am

    Em chào Thầy. Thầy cho em hỏi deploytool trong Matlab 7.0 nằm ở đâu?gõ lệnh gì?

    Reply

Leave a Comment