我有一个具有多种功能的现有dll,我们将其称为mylib
。我决定使用Matlab编码器来帮助我编写C文件。这些c文件使用VS 2015进行编译和链接以生成mylib
。
因此,我首先通过使用funcA.m
将funcA.c
转换为matlab coder ver 3.4 (R2017b)
来验证这一理论。 funcA
是一个简单的数学函数。然后,我编译并链接了由matlab编码器生成的所有c文件,以将funcA
包含在mylib
中。这完美地工作了。意思是,最初是m文件的funcA
已编译,链接到mylib
,并产生了准确的结果。
当我使用matlab编码器生成第二个函数时,就会出现问题。让我们调用第二个函数-> funcB
将funcA.m转换为funcA.c之后,matlab编码器生成了其他c文件,其中包括xgeqp3.c
和xnmr2.c
及其对应的头文件。我认为它们是人类无法读取的,因为它们是由matlab coder
自动生成的,并且您无法通过c文件的名称来读取它们,因此对人类不友好。但是,它们被funcA
调用,因此它们也必须编译到库中。
这些matlab生成的c文件给我带来了问题,因为当我将funcB.m
转换为funcB.c
时,它还生成了xgeqp3.c
和xnmr2.c
。尽管文件名相同,但是它们的内容不同,具有不同的形式参数,当然还有不同的C代码,即使它们具有相同的函数名和文件名。
因此,同一个库不能包含由Matlab编码器生成的这两个函数,因为xgeqp3.c
和xnmr2.c
的声明是矛盾的。我确定其他人可能也会遇到同样的问题。有没有一种方法可以手动命名由matlab编码器生成的额外c文件,从而避免出现重复的名称?还是有一种方法可以管理名称重复但代码不同的c文件?较简单的选项是为两个函数创建单独的库。但是我希望所有数学函数都在同一个库中。
我应该如何处理这种情况?我愿意接受新想法。预先谢谢你。
答案 0 :(得分:2)
您应该为要在同一dll中编译的所有函数一起生成c代码。
如果使用命令行,则应该执行以下操作:
codegen funcA, funcB
如果您使用的是Matlab Coder App,则将两个函数都添加为入口点文件。