linuxc调用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:~/你的库目录
更改/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++能够调用的动态库呀。