分享

Matlab生成dll使用Python调用+Python安装文件直接生成

 云深无际 2021-11-03

试试Matlab与Python集成,或是Matlab与C集成:

function c = add(a,b) c = a+bend

先写一个加法得matlab程序

长这样

点第三个

然后选择我们得代码

生成得名字

这里别自动了,没什么用

手动模式

把里面得变量类型设置一下,因为是C语言

为了代码得通用性,double类型得使用

1x1就是一个标量

点击下一步

我们这里就不出声exe了,我们使用python调用dll文件

生成一个c得代码

稍等一下,就好

ok了


cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add_initialize.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add_initialize.c"add_initialize.c cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add_terminate.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add_terminate.c"add_terminate.c cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add.c"add.c### Creating dynamic library ".\add.dll" ... link /RELEASE /INCREMENTAL:NO /NOLOGO -subsystem:console,5.02 kernel32.lib ws2_32.lib mswsock.lib advapi32.lib -dll -def:add.def -out:.\add.dll @add_rtw.rsp 正在创建库 .\add.lib 和对象 .\add.exp### Created: .\add.dll### Successfully generated all binary outputs.

这段日志是调用得生成器传入得参数

以及对应得输入和输出

matlab与c代码之间得联系

/* * File: add.c * * MATLAB Coder version : 4.1 * C/C++ source code generated on : 30-May-2021 18:23:39 */
/* Include Files */#include "add.h"
/* Function Definitions */
/* * Arguments : double a * double b * Return Type : double */double add(double a, double b){ return a + b;}
/* * File trailer for add.c * * [EOF] */
double add(double a, double b){ return a + b;}
function c = add(a,b) c = a+bend

两个代码的比较

生成得一套代码

成功

C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll

其实有很多得中间文件被生成

可以使用ctypes来调用dll文件

import ctypesll = ctypes.cdll.LoadLibrarylib = ll("./add.d")print("the out is {}".format(lib.add(1.0, 2.0)))

这里是执行结果

deploytool

也可以直接得来输入这个东西

弹出这个

点生成python包

开始工作

成功

生成得目录

python.exe .\setup.py install

先安装一下

import adda = add.initialize()b = a.add(1000.0, 89.0)print(b)a.terminate()

里面也可以看到最终 生成的代码

最重要的就是这些了


本文简单的使用matlab自带的代码生成器,分别生成了dll的文件和python的可安装包。未来为了性能可以优先考虑这样的作法,而且matlab的算法编写可真的太容易了。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多