zoukankan      html  css  js  c++  java
  • Matlab -- Matlab生成dll、库文件和头文件方法(win10+VS2015+Matlab2019b)

    MATLAB具有很高的计算性能,在该平台上很多算法易于实现,而有时需要使用C++调用Matlab编写的程序,可以将该函数编译成dll库文件,之后在C++中对其进行调用。

    本文详细讲解在Matlab中将函数编译成库文件,并在C++中进行调用的方法。

    Matlab编译

    首先,matlab中写好函数

    第一步:在matlab的命令行窗口中输入mex -setup,会出现以下界面。

     第二步:点击界面的“mex -setup C++”,会出现如下提示。

     以上两步说明Matlab的编译环境可行,并且是使用VS2015进行编译。不同版本的matlab使用的编译器可能不同,请确保matlab配置的编译器与之后使用的C++环境保持一致。

    第三步:对matlab的函数进行编译。注意:这里只能对matlab的function进行编译,并不能对一般的.m脚本进行编译。我们采用mcc的方式进行编译,命令如下:

    mcc -W cpplib:testmat -T link:lib testmat.m -C

    解释:
    -W是控制编译之后的封装格式;
    cpplib是指编译成C++的lib,如果需要编译成C的lib,就用lib即可,去掉cpp;
    cpplib后面的是需要生成文件的文件名,是自己取的,我们取名为testmat;
    -T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字即是.m函数的名字。
    其他具体含义可以通过mcc –help命令查看,注意参数的大小写。

    第五步:等待matlab进行编译,这个过程可能需要几分钟。编译完成后的命令行显示如下信息:

     需要用到的文件只有四个:testmat.ctf,testmat.dll,testmat.lib,testmat.h。

    PS:使用上述方法时,我第一次成功了,后边同样的操作一直失败,报错如下图:

    查了很久也没有找到原因,在Matlab Answers里看到一个问答,

     有个回答如下:

    大概意思就是把主编译文件.m放在matlab主程序文件夹内(我试了不行..),或者使用deploytool,这个工具可以生成特定文件夹内.m文件dll等库的功能。

    于是乎,使用deploytool生成头文件以及库文件等,成功,deploytool方法如下:

    第一步:在命令行窗口输入mbuild -setup(注意-之前加空格,否则报错)

     第二步:点击mex -setup C++ -client MBUILD后,继续输入deploytool

     等待弹出窗口,如下图,选择Library Compiler

    弹出窗口,一定要选择C++ Shared Library,选其他的生成的不对,然后点击右侧加号,选择.m文件,

    窗口下边会出现即将生成的文件

     点击右上角生成按钮,选择生成文件放置文件夹,等待打包完成。

     

     最后生成是文件在对应文件夹中,.ctf文件在v2文件夹里,自己找找,到这里matlab生成库文件就完成了

  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/zzzsj/p/14630559.html
Copyright © 2011-2022 走看看