修改
经过这么多努力只产生错误的.exe文件后,我们决定不花更多的时间来尝试生成代码,而是自己编写代码。谢谢大家的时间。
_ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ / _ /
TL; DR问题
我已经用MATLAB Coder从MATLAB导出了C ++代码,我该如何编译呢?
完整问题
使用Matlab App" MATLAB Coder"您可以将MATLAB代码编译为C ++代码。我知道一些步骤,但不是所有步骤,经过一些广泛的谷歌搜索,我只找到了一些答案,但没有成功。让我们一起努力拼凑信息。我打算将这个问题作为指导。
这是我们想要的C ++代码的MATLAB程序:
disp('Hello World')
0。重写:
首先,MATLAB Coder需要一个函数和一个运行该函数的.m文件。代码被重写为一个名为 HelloWorld.m
的文件function [] = Helloworld()
disp('Hello World')
end
另一个名为 ScriptHelloWorld.m 的文件,其中包含:
HelloWorld();
1。运行MATLAB编码器
一旦找到它,程序就非常简单。它位于" Apps"然后你可以选择启动MATLAB编码器。这包含在MATLAB 2015及更高版本中。启动后,选择要运行的文件,然后选择运行它的文件。没问题,因为它们都是非常简单的文件。我们决定将该项目命名为“HejWorld"。
”2。获取文件
这是信息不再那么清晰的地方。所有文件都将放在您选择的文件夹中,据说它们都很重要。这就是文件结构的样子:
lib的内部看起来像这样:
而mex的内部看起来像这样:
第3。编译
这是我无能为力的地方。它应该只是编译文件,但它并不是一个简单的任务。我在codegen / lib / HelloWorld / HelloWorld_rtw.mk中找到where the makefile is,但可能有更多的makefile,因为我不确定要构建什么。
此外,在根目录HelloWorld.prj中有一个.prj文件,如第一个屏幕截图所示。我找不到用gcc或任何其他应用程序运行它的方法。
感谢您的帮助!
答案 0 :(得分:1)
您需要lib / Helloworld下的所有文件。如果从shell调用该目录中的makefile Helloworld_rtw.mk,它应该在unix平台上创建一个库Helloworld.so,在windows上创建一个Helloworld.lib。
gmake -f Helloworld_rtw.mk build
您可以将代码链接到此库以调用该库中的主函数Helloworld。调用Helloworld的示例main.c放在examples目录下。在将Helloworld库添加为链接器选项并包含标头路径之后,您应该能够将此示例编译为可执行文件。
要查看它的工作而不是在代码中调用disp,您可能需要执行一些简单的算法,如下所示。这是因为disp不会为lib target生成任何代码。
function [y] = Helloworld(u)
y = 2*u;
end
在ScriptHellowWorld.m
中Helloworld(2);
在调用Helloworld函数后,您可以在main函数的副本中手动添加printf语句。
答案 1 :(得分:1)
如果您计划为运行MATLAB的同一台机器或具有兼容架构的机器编译代码,您可以让MATLAB Coder为您编译。假设你想要一个静态库。然后从Build Type
下拉列表中选择该内容,并确保取消选中Generate Code Only
。请参阅screenshot的文档。
代码生成完成后,MATLAB Coder将编译代码以在codegen/lib/Helloworld
中生成静态库。