我已经使用mcc构建了一个嵌入了CTF的共享库,然后创建了第二个共享库,它实际上暴露了我在应用程序中需要的接口。因此,我有两个共享库。
但是,我想要做的是有一个单个共享库,其中包含CTF但导出的包装函数而不是MATLAB生成的mlx / mlf函数。我一直无法在文档中找到有关此内容的任何内容,或者从mcc / mbuild的详细输出中找到的任何内容。我确信这是可能的。
要创建包含CTF的MATLAB编译器运行时(MCR)链接共享库(DLL),我运行以下命令:
mcc -v -W lib:libalgorithm -T link:lib algorithm.m
这会生成libalgorithm.dll
,libalgorithm.lib
和libalgorithm.h
以及其他构建文件。为了向我的应用程序公开所需的接口,我创建了wrapper.c
,然后调用mlxAlgorithm
,在我的应用程序可以处理的类型和MATLAB的mxArray
之间进行转换。这是用MATLAB编译的:
mbuild -v -I. wrapper.c libalgorithm.lib wrapper.exports
这会生成wrapper.dll
。然后,我必须携带wrapper.dll
和libalgorithm.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?