zoukankan      html  css  js  c++  java
  • matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)

    在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的。
    1. 使用matlab生成dll文件
    1.1 首先需要带有mcc编译器的matlab软件,这个可以通过在matlab命令行中输入:!mcc命令来查看
    这里写图片描述
    1.2然后再命令窗口输入mbuild -setup选中要使用的C++编译器,在这里我选择了VS2013的编译器。
    这里写图片描述
    1.3选好编译器后再命令窗口输入deploytool进入编译窗口,在弹出的窗口中选择第二项,即生成dll动态链接库的形式,之后会弹出如下窗口
    这里写图片描述
    在MATLAB Complie对话框中的左上角APPLICATION TYPE中选择C++ Shared Library类型,在旁边的白色框中点击加号将需要编译成dll的.m文件添加到当前项目中,
    这里写图片描述
    1.4之后就可以点击右上角的package按钮生成dll文件,点击之后matlab会弹出编译进行的对话框,此时只需要等待既可以了
    这里写图片描述
    等待一段时间之后就可以在指定的目录下看到生成dll以及相应的.h和.lib文件
    这里写图片描述
    这里写图片描述
    2. dll简单测试
    使用新建一个win32的空的控制台项目,同时将刚刚生成的mysvd.h,mysvd.lib和mysvd.dll拷贝到当前项目文件夹下,然后输入以下代码

    #include <iostream>
    #include "mclmcr.h"
    #include "matrix.h"
    #include "mclcppclass.h"
    #include "mysvd.h"
    using namespace std;
    
    #pragma comment(lib,"mysvd.lib")
    
    int main()
    {
        if (!mysvdInitialize())    //初始化,在libmysvd.h中
        {
            cout << "Could not initialize libmysvd!" << endl;
            exit(0);
        }
        double data[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        mwArray a(3, 3, mxDOUBLE_CLASS, mxREAL);
    
        a.SetData(data, 9);
        cout << a << endl << endl;  //显然,mwArry类对<<是有运算符重载的
    
        mwArray s(3, 3, mxDOUBLE_CLASS, mxREAL);
        mwArray v(3, 3, mxDOUBLE_CLASS, mxREAL);
        mwArray d(3, 3, mxDOUBLE_CLASS, mxREAL);
    
        mysvd(1, s, a);  //调用自己用matlab写的函数,对a做奇异值分解
    
        cout << s << endl << endl;
        cout << v << endl << endl;
    
        for (int i = 1; i < 4; i++) //逐个显示元素
        {
            for (int j = 1; j < 4; j++)
            {
                cout << d.Get(i, j) << "  ";
            }
            cout << endl;
        }
    
        cin.get();
        return 0;
    }

    相关环境:

    包含目录:C:Program Files (x86)MATLABR2014aexterninclude 
    库目录:C:Program Files (x86)MATLABR2014aexternlibwin32microsoft
    在链接器->输入选项中,附加依赖项:
    libmat.lib
    libmex.lib
    mclmcr.lib
    mclmcrrt.lib

    结果:
    这里写图片描述
    出处:http://blog.csdn.net/sjhuangx/article/details/49305237

  • 相关阅读:
    菜鸟之旅——序章0
    Nginx设置反向代理内网服务器/内部端口
    Laradock ppa加速
    Qt setGraphicsEffect出现崩溃 读取位置 时发生访问冲突
    3.5tensorflow线性回归和线性拟合
    Dockerfile Security Best Practice
    Docker: Exec user process caused "no such file or directory"
    Installing Kubernetes with kops
    Dockerfile 最佳实践
    Configuring HSTS in NGINX
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538167.html
Copyright © 2011-2022 走看看