如何管理通过Matlab编码器自动生成的C文件?

时间:2018-09-28 00:30:32

标签: c dll visual-studio-2015 matlab-coder

我有一个具有多种功能的现有dll,我们将其称为mylib。我决定使用Matlab编码器来帮助我编写C文件。这些c文件使用VS 2015进行编译和链接以生成mylib

因此,我首先通过使用funcA.mfuncA.c转换为matlab coder ver 3.4 (R2017b)来验证这一理论。 funcA是一个简单的数学函数。然后,我编译并链接了由matlab编码器生成的所有c文件,以将funcA包含在mylib中。这完美地工作了。意思是,最初是m文件的funcA已编译,链接到mylib,并产生了准确的结果。

当我使用matlab编码器生成第二个函数时,就会出现问题。让我们调用第二个函数-> 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编码器生成的这两个函数,因为xgeqp3.cxnmr2.c的声明是矛盾的。我确定其他人可能也会遇到同样的问题。有没有一种方法可以手动命名由matlab编码器生成的额外c文件,从而避免出现重复的名称?还是有一种方法可以管理名称重复但代码不同的c文件?较简单的选项是为两个函数创建单独的库。但是我希望所有数学函数都在同一个库中。

我应该如何处理这种情况?我愿意接受新想法。预先谢谢你。

1 个答案:

答案 0 :(得分:2)

您应该为要在同一dll中编译的所有函数一起生成c代码。
如果使用命令行,则应该执行以下操作:

codegen funcA, funcB  

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