我有一个具有多个函数的现有dll,我们称之为mylib
。我决定使用 matlab 编码器来帮助我编写 c 文件。这些c文件被编译和链接以生成mylib
使用VS 2015。
所以我测试了这个理论,我首先使用matlab coder ver 3.4 (R2017b)
将funcA.m
转换为funcA.c
。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 文件?更简单的选择是为这两个函数创建单独的库。但我希望我所有的数学函数都在同一个库中。
我应该如何处理这种情况?我对新想法持开放态度。提前谢谢你。
您应该为要在同一 dll 中编译的所有函数一起生成 c 代码。
如果您使用的是命令行,则应执行以下操作:
codegen funcA, funcB
如果您使用的是 Matlab Coder 应用程序,请将这两个函数添加为入口点文件。