因为一直在本地用matlab跑数据,既然实验室给我一个就自己在使用的服务器,当然要充分的利用好了,就在在服务器上安装了matlab,并学习了一下如何在linux服务器下跑.c文件。
一.在linux下利用命令行安装matlab
主要参考的博客 https://blog.csdn.net/wzz18191171661/article/details/73253107,主要包括了以下几个步骤
1.下载“Crack”和“ISO”文件
下载地址如下所示:http://pan.baidu.com/s/1c2J5XE4,我是在本地下载的,然后在上传到服务器的,在服务器上下载实在是太慢了。
2.对映像文件进行挂载
1)cd ~ # 切换到home目录
2)sudo mkdir matlab # 创建一个文件夹,并命名为matlab,用于挂载
3)sudo mkdir Linux # 创建一个文件夹,用来存放两个ISO文件
4)sudo mount -t auto -o loop Linux/R2016b_glnxa64_dvd1.iso matlab/ # 挂载dvd1
5)sudo /home/user01/matlab/install # 开始安装
6)当安装进度条执行到80%时,需要另外打开一个“终端”,开始挂载dvd2。
sudo mount -t auto -o loop Linux/R2016b_glnxa64_dvd2.iso matlab/
7)sudo umount matlab/ # 安装完成后取消挂载
8)sudo rm -r matlab/ # 删除空文件夹
在安装过程中出现的图形界面里选择use a File Installation Key来安装;安装序号在“Crack”文件下的txt文件中。
3.激活MATLAB
1)将~/Crack/bin/中的文件复制到~/MATLAB/bin中
当然要先对“Crack”压缩包进行解压,到文件夹下使用 tar -xzvf 文件名 即可解压
sudo cp /home/user01/Linux/Crack/R2016b/bin/glnxa64/* /home/user01/MATBLE/bin/glnxa64
我是把matlab安装在自己的用户下的。
2)cd /home/user01/MATBLE/bin # 切换到Matlab的安装路径中
3)sudo ./matlab # 以root权限运行。
后面激活的时候选择Activate manually without the Internate,输入激活文件时,选择在“Crack”文件中的license_standalone.lic文件就OK了。
二.在linux下运行matlab程序
1.打开matlab终端
1)cd /home/user01/data_sampling/ 进入到需要运行的.m文件夹下
2) /home/user01/MATBLE/bin/matlab -nodesktop -nosplash 加上完整的MATLAB安装路径,不然无法运行,后面的两个参数是告诉matlab步启动图形界面运行,只是打开终端。
3)ls 可以看到当前目录下的所有文件。
4)order; 这样就运行了order.m文件了。
2.或者还有一种更加直接的方法,直接在linux终端运行.m文件:
/home/user01/MATBLE/bin/matlab -nodesktop -nosplash -r order
三.MATLAB与C的混合编程
1.检查gcc的版本
混合编程这一块主要用到了mex,当然是需要有C的编译器gcc或者g++,因为这个版本的matlab只支持4.9.x版本的gcc,而我的服务器里面的gcc版本是5.4.0的,所以第一步我是需要把gcc降级到4.9.x
1)下载gcc/g++ 4.9.x版本
sudo apt-get install -y gcc-4.9
sudo apt-get install -y g++-4.9
2)链接gcc/g++来进行降级
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.9 gcc
sudo rm g++
sudo ln -s g++-4.9 g++
gcc --version 查看gcc的版本
2.进入到需要编译的.c文件下,并进行编译
cd cd /home/user01/data_sampling/
sudo /home/user01/MATBLE/bin/matlab -nodesktop -nosplash 要使用sudo进入,不然权限不够无法编译
mex Cal_Comp.c 进行了编译
ls 查看是否有Cal_Comp.mexa64文件,如果含有则编译成功,可以直接在.m文件中调用了。
我在编译中遇到的问题:1)不能够使用中文注释,所以我把注释全删了。2)遇到error: ‘for’ loop initial declarations are only allowed in C99 mode,是因为用gcc编译的话不能够在for中定义变量如for(int i = 0, i<20,i++),需要改成int i; for(i=0,i<20,i++)。
完成了这三大步之后,大功告成,我的MATLAB程序能够在服务器上跑了。
Linux小白,顺便纪录一些Linux指令
sudo vim 文件 : 用于打开文件,进入后按 i进入编辑模式,编辑完了之后按Esc进入一般模式,输入:wq来保存和退出文件,q!表示强制退出
sudo rm -rf file_name 直接删除文件及其文件夹,无需询问,使用时需要慎重,因为linux没有回收站。
sudo rm -i *.c 逐一的删除.c文件,并且进行询问。
sudo cp -r data_sampling/* MATLAB/user_code 把data_sampling 下的所有文件都拷贝到user_code下。
sudo mv /user/data/* /sample 把data下面的文件移动到sample下,加入参数-r则表示把所有文件都移动,-i需要与用户交互,-f不需要询问覆盖。
cd ..回到上一层
cd ~ 或者 cd 回到用户目录
cd / 回到根目录