如何在共享库中嵌入MATLAB CTF?

时间:2014-03-11 20:01:52

标签: matlab matlab-deployment matlab-compiler

我已经使用mcc构建了一个嵌入了CTF的共享库,然后创建了第二个共享库,它实际上暴露了我在应用程序中需要的接口。因此,我有两个共享库。

但是,我想要做的是有一个单个共享库,其中包含CTF但导出的包装函数而不是MATLAB生成的mlx / mlf函数。我一直无法在文档中找到有关此内容的任何内容,或者从mcc / mbuild的详细输出中找到的任何内容。我确信这是可能的。

修改

要创建包含CTF的MATLAB编译器运行时(MCR)链接共享库(DLL),我运行以下命令:

mcc -v -W lib:libalgorithm -T link:lib algorithm.m

这会生成libalgorithm.dlllibalgorithm.liblibalgorithm.h以及其他构建文件。为了向我的应用程序公开所需的接口,我创建了wrapper.c,然后调用mlxAlgorithm,在我的应用程序可以处理的类型和MATLAB的mxArray之间进行转换。这是用MATLAB编译的:

mbuild -v -I. wrapper.c libalgorithm.lib wrapper.exports

这会生成wrapper.dll。然后,我必须携带wrapper.dlllibalgorithm.dll,因为我将创建许多不同的算法,这将在文件管理和命名方面造成麻烦。

所以我想简单地生成一个导出我想要的界面并包含CTF的共享库。我尝试了以下命令:

mcc -v -W lib:libalgorithm algorithm.m
mbuild -v wrapper.c libalgorithm.c wrapper.exports

这可以编译和链接,导致单个共享库,但CTF作为单独的文件libalgorithm.ctf提供,并且未嵌入。我的应用程序可以成功链接并调用此库,但是在调用MCR生成的函数libalgorithmInitialize时会产生“无此类文件或目录”错误,因为尚未提取CTF。虽然我可以提取这个,但这只会加剧文件管理问题。

在运行这两个不同的命令对时查看详细输出,我看不出生成的构建命令之间的任何差异,但是一个库嵌入了CTF而另一个库没有。 MCR如何将CTF嵌入DLL?

0 个答案:

没有答案