當前位置:首頁 » 操作系統 » linuxc調用matlab

linuxc調用matlab

發布時間: 2022-06-01 11:15:25

Ⅰ 如何在linux下配置c混編MATLAB的編譯環境

matlab程序是在matlab里跑的,C++程序能調用matlab提供的數學庫,但沒什麼辦法直接轉換

Ⅱ MATLAB可以安裝在linux上嗎

MATLAB可以安裝在linux上,MATLAB在linux上安裝步驟如下:

1、掛載鏡像並開始運行install文件,如圖所示。

Ⅲ 如何在linux下用matlab生成動態鏈接庫

首先如何製作Linux下的so 文件

首先讓我們來看一下,把庫函數推遲到程序運行時期載入的好處:

1.可以實現進程之間的資源共享。

什麼概念呢?就是說,某個程序的在運行中要調用某個動態鏈接庫函數的時候,操作系統首先會查看所有正在運行的程序,看在內存里是否已有此庫函數的拷貝了。如果有,則讓其共享那一個拷貝;只有沒有才鏈接載入。這樣的模式雖然會帶來一些「動態鏈接」額外的開銷,卻大大的節省了系統的內存資源。C的標准庫就是動態鏈接庫,也就是說系統中所有運行的程序共享著同一個C標准庫的代碼段.

2.將一些程序升級變得簡單。用戶只需要升級動態鏈接庫,而無需重新編譯鏈接其他原有的代碼就可以完成整個程序的升級。Windows 就是一個很好的例子。

3.甚至可以真正坐到鏈接載入完全由程序員在程序代碼中控制。

程序員在編寫程序的時候,可以明確的指明什麼時候或者什麼情況下,鏈接載入哪個動態鏈接庫函數。你可以有一個相當大的軟體,但每次運行的時候,由於不同的操作需求,只有一小部分程序被載入內存。所有的函數本著「有需求才調入」的原則,於是大大節省了系統資源。比如現在的軟體通常都能打開若干種不同類型的文件,這些讀寫操作通常都用動態鏈接庫來實現。在一次運行當中,一般只有一種類型的文件將會被打開。所以直到程序知道文件的類型以後再載入相應的讀寫函數,而不是一開始就將所有的讀寫函數都載入,然後才發覺在整個程序中根本沒有用到它們

步驟:

首先建立一個函數文件fun.cpp 以及頭文件 fun.h

[cpp]view plain

  • exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/你的庫目錄

  • (2)
  • 更改/etc/ld.so.conf,添加我們的庫目錄,然後執行ldconf

    需要root許可權

    (3)加入/user/lib 或者/usr/lib64看你的機器位數,貌似拷貝的方法最湊效了,其他方法有時候行不通

    Ⅳ matlab與才c/c++混合編程

    用Matlab編譯C語言生成的代碼效率並不高.如果真想有效的在Windows環境下調用數學工具的鏈接庫或com文件,建議還是用Microsoft Math v3.0.

    Ⅳ linux下 命令行執行matlab速度很慢

    首先介紹一下我自己使用的有效方法,一般matlab啟動初始化很慢主要的原因是在找注冊文件,一般是由於安裝了MAC類的軟體引起的,所以我按照下文提供的方法「在【目標】中,鍵入如下內容」$MATLAB\bin\win32\MATLAB.exe」 -c 「<Full Path to the MATLAB license file including file name>」」,我在快捷方式裡面目標路徑中鍵入:"C:\Program Files\MATLAB\R2009b\bin\win32\MATLAB.exe" -c "C:\Program Files\MATLAB\R2009b\bin\win32\lic_standalone.dat",即解決了這個問題,感謝網友無私的分享精神。注意上面路徑中lic_standalone.dat是自己的許可文件,換換就可以了!

    Matlab隨著版本的升級體積越來越大,帶來的問題就是啟動速度也越來越慢,下面就我注意到的幾個影響MATLAB啟動速度的問題集中和大家分析下解決辦法。
    一、preferences方面原因
    問題產生原因:
    大家都知道,preferences參數很多,如果首選參數設置的不得當,或者文件太大,Matlab啟動的時候載入preferences設置就需要較長時間
    問題解決方法:
    以管理員許可權登錄,以保證自己有查看隱藏文件的許可權。
    windows
    (1)退出Matlab,一定要確保Matlab不再運行
    (2)進入c:\Documents and Settings\ <your username>\Application Data\MathWorks\MATLAB\ 復制代碼真實該路徑可以在Matlab中鍵入prefdir得到
    (3)將上述路徑中,以Matlab版本號為文件名(比如R2009a)的文件夾,重命名為R2009a_old(其實這一步是在備份preferences文件)
    (4)重啟Matlab,此時predir下會重新創建一個R2009a文件夾,裡麵包含了所有的preferences設置,只是屬性值都是默認的,當然以前對Matlab的設置全部沒有了
    (5)如果覺得不滿意,那麼將新生成的R2009a刪除,將R2009a_old重新改為R2009a就可以恢復以前的設置了。
    Linux, Unix, or Mac
    1) Quit MATLAB. Ensure that MATLAB is no longer running.
    2) Rename the 「.matlab/」 directory in the users home directory, to 「.matlab_old/」.
    3) Restart MATLAB.
    二、License方面原因
    問題產生原因:
    每次Matlab啟動的時候會自動搜索Matlab的License文件,而計算機系統變數LM_LICENSE_FILE,則是用來告訴所有的應用程序從哪裡找到對應的License文件
    另外系統變數LM_LICENSE_FILE也可能導致初始化很慢,但是該變數只對Matlab負責,LM_LICENSE_FILE是對所有的程序負責
    但是假如你的Matlab使用的是網路版的License,你計算機沒有聯網就會導致無法找到network license
    解決方法:
    方法一
    windows
    (1)右擊【我的電腦】選擇【屬性】
    (2)在【高級】選項卡中,點擊【環境變數】
    (3)在下面的【系統變數】找到【LM_LICENSE_FILE】,如果沒有,點擊【新建】創建一個變數名為LM_LICENSE_FILE的變數
    (4)將LM_LICENSE_FILE的屬性值設置為Maltab的License文件的絕對路徑
    (5)重啟Matlab
    Unix,Linux,or Mac
    Check to see if there is an environment variable set. Where this is located depends on the shell you are using. Look in your home folder. This file may be called: .cshrc (c-shell), .profile (bash), or .bashrc (bash)
    You can also create an environment variable for that shell session from the command line using export or setenv (depending on your shell), but the above file needs to be edited for a permanent change.
    For example:export MLM_LICENSE_FILE /usr/bin/matlab/license.dat
    如果你只有一個License,那麼你可以當Matlab啟動的時候,在Maltab快捷方式或者命令行中指定License路徑
    windows
    (1)右擊Matlab快捷方式,選擇【屬性】
    (2)在【目標】中,鍵入如下內容」$MATLAB\bin\win32\MATLAB.exe」 -c 「<Full Path to the MATLAB license file including file name>」
    復制代碼其中$MATLAB是Matlab安裝根目錄,可以在Matlab中鍵入matlabroot得到,<Path to the MATLAB license file>是License文件的絕對路徑
    (3)重啟Matlab
    Unix,Linux,or Mac
    Use a -c switch to point directly at the license file when launching.
    If the MATLAB installer has created symbolic links, runmatlab -c <Full Path to the MATLAB license file including file name>
    If symbolic links were not created, run from $MATLAB/bin/./matlab -c <Full Path to the MATLAB license file including file name>
    Where $MATLAB is the root MATLAB directory and <Path to the MATLAB license file> is the absolute path to your license file, likely in your $MATLAB/licenses directory.

    Ⅵ 想在linux下做一個圖形界面,能調用MATLAB,能跑視頻....問下高人GTK,QT,kylix哪個能實現且容易上手些

    我知道python應該可以做到,QT,GTK簡單的還成,要是去調用,都不太好辦。
    相比較我認為QT還好些,只要你知道怎麼用C來調就行。

    Ⅶ 如何在linux下面運行 Matlab的 .m 文件

    安裝matlab code toolbox,然後生成可執行程序或者動態鏈接庫文件,然後linux調用就好

    Ⅷ linux c++ 怎麼 調用自己函數的

    實驗平台:ubuntu 12.04 + g++4.6 + matlab2012a

    問題描述:
    有一個c++程序main.cpp,和一個matlab函數myFunc.m。現在要做這件事:
    1)從main.cpp中傳遞2個double類型的數值a和b到myFunc.m中
    2)myFunc.m中求和(sum = a+b)
    3)main.cpp中接收myFunc.m返回的和並輸出。

    思路:
    1)設置matlab的編譯器,使用gcc編譯器。編譯m文件成.so。
    2)編譯.cpp文件,編譯時調用.so庫(添加.so的路徑到編譯選項)。

    步驟:
    1)將自己的matlab函數(myFunc.m)編譯成動態鏈接庫

    (1) 設定編譯器為gcc,在matlab 命令行依次執行命令mex -setup和mbuild -setup:
    >> mex -setup Options files control which compiler to use, the compiler and link command options, and the runtime libraries to link against. Using the 'mex -setup' command selects an options file that is placed in ~/.matlab/R2012a and used by default for 'mex'. An options file in the current working directory or specified on the command line overrides the default options file in ~/.matlab/R2012a. To override the default options file, use the 'mex -f' command (see 'mex -help' for more information).The options files available for mex are: 1: /opt/MATLAB/R2012a/bin/mexopts.sh : Template Options file for building gcc MEX-files 0: Exit with no changesEnter the number of the compiler (0-1):1/opt/MATLAB/R2012a/bin/mexopts.sh is being copied to ~/.matlab/R2012a/mexopts.shcp: cannot create regular file `~/.matlab/R2012a/mexopts.sh': Permission denied************************************************************************** Warning: The MATLAB C and Fortran API has changed to support MATLAB variables with more than 2^32-1 elements. In the near future you will be required to update your code to utilize the new API. You can find more information about this at: http://www.mathworks.com/help/techdoc/matlab_external/bsflnue-1.html Building with the -largeArrayDims option enables the new API. **************************************************************************>> mbuild -setup Options files control which compiler to use, the compiler and link command options, and the runtime libraries to link against. Using the 'mbuild -setup' command selects an options file that is placed in ~/.matlab/R2012a and used by default for 'mbuild'. An options file in the current working directory or specified on the command line overrides the default options file in ~/.matlab/R2012a. To override the default options file, use the 'mbuild -f' command (see 'mbuild -help' for more information).The options files available for mbuild are: 1: /opt/MATLAB/R2012a/bin/mbuildopts.sh : Build and link with MATLAB Compiler generated library via the system ANSI C/C++ compiler 0: Exit with no changesEnter the number of the compiler (0-1):1/opt/MATLAB/R2012a/bin/mbuildopts.sh is being copied to ~/.matlab/R2012a/mbuildopts.shcp: cannot create regular file `~/.matlab/R2012a/mbuildopts.sh': Permission denied>>

    (2) 在matlab中,編寫myFunc.m文件內容如下:
    function [ C ] = myFunc(A, B)C = A+B;end

    (3) 生成myFunc.m的動態鏈接庫(.so)
    >> mcc -W cpplib:libmyFunc -T link:lib myFunc.m -cWarning: MATLAB Toolbox Path Cache is out of date and is not being used.Type 'help toolbox_path_cache' for more info >>

    等待數秒,完成。可以看到myFunc.m所在的目錄下生成了多個文件:
    $ lslibmyFunc.cpp libmyFunc.ctf libmyFunc.exports libmyFunc.h libmyFunc.so main.cpp mccExcludedFiles.log myFunc.m readme.txt


    令解釋:其中-W是控制編譯之後的封裝格式;cpplib是指編譯成C++的lib;cpplib冒號後面是指編譯的庫的名字;-T表示目
    標,link:lib表示要連接到一個庫文件的目標,目標的名字即是.m函數的名字。-c表明需要生成.ctf文件,比如本例如果不加-c就不會生成
    「libmyFunc.ctf」。

    生成的文件中打開「libmyFunc.h」可以看到一行:
    extern LIB_libmyFunc_CPP_API void MW_CALL_CONV myFunc(int nargout, mwArray& C, const mwArray& A, const mwArray& B);

    個就是我們的myFunc.c函數待會兒在c++中調用時的介面。有4個參數,第一個是參數個數,第二個是用來接收函數返回值的,後面2個是從c++中傳
    遞進來的變數。我們還會用到「libmyFunc.h」中的另外2個函數:libmyFuncInitialize()初始化,和注銷
    libmyFuncTerminate()。

    2)編寫main.cpp,代碼如下:
    #include <iostream>#include "mclmcr.h"#include "matrix.h"#include "mclcppclass.h"#include "libmyFunc.h"#include "mclmcrrt.h"using namespace std;int main() { // initialize lib,這里必須做初始化! if( !libmyFuncInitialize()) { std::cout << "Could not initialize libmyFunc!" << std::endl; return -1; } // 用戶輸入2個數值 double a, b; cout<<"Please input 2 numbers <a b> and then press enter: "<<endl; cin >> a; cin >> b; double c; //used to receive the result // 為變數分配內存空間, maltab只有一種變數,就是矩陣,為了和c++變數接軌,設置成1*1的矩陣 mwArray mwA(1, 1, mxDOUBLE_CLASS); //1,1表示矩陣的大小, mxDOUBLE_CLASS表示變數的精度 mwArray mwB(1, 1, mxDOUBLE_CLASS); mwArray mwC(1, 1, mxDOUBLE_CLASS); // 調用類裡面的SetData函數給類賦值 mwA.SetData(&a, 1); mwB.SetData(&b, 1); // 調用自己的函數,求和。 myFunc(1, mwC, mwA, mwB); c = mwC.Get(1, 1); cout<<"The sum is: "<<c<<endl; // 後面是一些終止調用的程序 // terminate the lib libmyFuncTerminate(); // terminate MCR mclTerminateApplication(); return EXIT_SUCCESS;}

    3)編譯main.cpp函數,調用libmyFunc.so
    $ g++ -o main -I. -I/opt/MATLAB/R2012a/extern/include -L. -L/opt/MATLAB/R2012a/runtime/glnxa64 main.cpp -lmyFunc -lm -lmwmclmcrrt -lmwmclmcr

    開始編譯時也遇到一些問題,主要是鏈接庫路徑問題導致的編譯錯誤,詳細錯誤匯總在另篇筆記里(點此查看)。
    編譯成功後,需要裝一下MCR Installer,步驟點此。

    運行結果:
    $ ./main Warning: latest version of matlab app-defaults file not found.Contact your system administrator to have this file installedPlease input 2 numbers <a b> and then press enter: 10 100The sum is: 110$ ./main Warning: latest version of matlab app-defaults file not found.Contact your system administrator to have this file installedPlease input 2 numbers <a b> and then press enter: 1 1The sum is: 2

    源代碼及編譯過程中的所有文件已打包,點擊這里可以下載。

    Ⅸ 在linux中,matlab與c混編遇到下面問題:

    系統的gcc版本太高,mathlab只支持到gcc4.2.3

    裝個 gcc4.2.3,並且把libpath那些都指到這個版本
    或者換個支持高版本gcc的mathlab

    Ⅹ linux 平台下 用gcc 編譯C調用Matlab介面的代碼可以,為什麼用g++不行。有什麼解決辦法嗎

    g++是c++的編譯器啊,你需要把.m文件編譯成c++能夠調用的動態庫呀。

    熱點內容
    2019速騰買什麼配置好 發布:2025-01-11 01:35:07 瀏覽:828
    博越存儲異常 發布:2025-01-11 01:24:31 瀏覽:917
    我的世界還原中國伺服器版圖 發布:2025-01-11 01:18:45 瀏覽:383
    pythonopenasfile 發布:2025-01-11 01:17:06 瀏覽:972
    hbasejavaapi 發布:2025-01-11 01:11:09 瀏覽:746
    我的世界pe版飢餓伺服器 發布:2025-01-11 01:09:39 瀏覽:485
    異構資料庫數據同步 發布:2025-01-11 01:09:04 瀏覽:957
    c語言三角波 發布:2025-01-11 01:02:11 瀏覽:78
    php正則轉義 發布:2025-01-11 01:00:03 瀏覽:691
    手拉的箱包上的密碼鎖一般是多少 發布:2025-01-11 00:59:55 瀏覽:8