如何管理从 matlab coder 自动生成的 c 文件?

How to manage automatically generated c-files from matlab coder?

我有一个具有多种功能的现有dll,我们称它为mylib。我决定使用 matlab coder 来帮助我编写我的 c 文件。使用 VS 2015 编译和链接这些 c 文件以生成 mylib

所以我首先通过使用 matlab coder ver 3.4 (R2017b)funcA.m 转换为 funcA.c 来测试这个理论。 funcA 只是一个简单的数学函数。然后我编译并链接了 matlab coder 生成的所有 c 文件,将 funcA 包含在 mylib 中。这非常有效。意思是,funcA 最初是一个 m 文件,它被编译,链接到 mylib 并产生了准确的结果。

当我使用matlab coder 生成我的第二个函数时出现问题。让我们调用第二个函数 -> funcB

将funcA.m转换为funcA.c后,matlab编码器生成了其他c文件,其中包括xgeqp3.cxnmr2.c及其相应的头文件。我认为它们是人类不可读的,因为它们是由 matlab coder 自动生成的,并且阅读它们对人类来说并不友好,正如您可以从 c 文件的名称中看出的那样。然而,它们被 funcA 调用,所以它们也必须被编译到库中。

这些 matlab 生成的 c 文件给我带来了问题,因为当我将 funcB.m 转换为 funcB.c 时,它还生成了 xgeqp3.cxnmr2.c。虽然文件名相同,但其内容不同,具有不同的形式参数,当然还有不同的c代码,即使它们具有相同的函数名和文件名。

所以同一个库不能包含这两个由 matlab coder 生成的函数,因为 xgeqp3.cxnmr2.c 的声明相互矛盾。我相信其他人可能也有同样的问题。有没有一种方法可以手动命名额外的 c 文件生成我的 matlab 编码器,这样我就可以避免这样的重复名称?或者有什么方法可以管理名称重复但代码不同的 c 文件?更简单的选择是为这两个函数创建单独的库。但我希望我所有的数学函数都在同一个库中。

我该如何处理这种情况?我乐于接受新想法。提前谢谢你。

您应该为要在同一个 dll 中编译的所有函数一起生成 C 代码。
如果您使用的是命令行,您应该这样做:

codegen funcA, funcB  

如果您使用的是 Matlab Coder App,请将这两个函数添加为入口点文件。