【问题标题】:MATLAB Coder hello world start to finishMATLAB Coder hello world 从头到尾
【发布时间】:2016-08-29 22:45:01
【问题描述】:

编辑

经过这么多努力只为生成错误的 .exe 文件,我们决定不再花更多时间尝试生成代码,而是自己编写代码。谢谢大家的时间。

_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _ / _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/

TL;DR 问题

我已经使用 MATLAB Coder 从 MATLAB 中导出了 C++ 代码,我该如何编译它?

完整问题

使用 Matlab 应用程序“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 Coder

一旦您找到该程序,它就非常简单。它在“应用程序”中,然后您可以选择启动 MATLAB Coder。这包含在 MATLAB 2015 及更高版本中。启动后,选择要运行的文件,然后选择运行它的文件。这里没有问题,因为它们都是非常简单的文件。我们决定将项目命名为“HejWorld”。

2。获取文件

这是信息不再那么清晰的地方。所有文件都将放在您选择的文件夹中,据说它们都很重要。这是文件结构的样子:

lib 的内部是这样的:

mex 内部是这样的:

3.编译

这是我一无所知的地方。它应该只是编译文件,但事实证明这不是一件容易的事。我在 codegen/lib/HelloWorld/HelloWorld_rtw.mk 中找到了 where the makefile is,但可能还有更多的 makefile,因为我不确定要构建什么。

此外,在根目录中还有一个 .prj 文件 HelloWorld.prj,如第一个屏幕截图所示。我找不到使用 gcc 或任何其他应用程序运行它的方法。

感谢您的帮助!

【问题讨论】:

    标签: c++ matlab compilation makefile matlab-coder


    【解决方案1】:

    您需要 lib/Helloworld 下的所有文件。如果您从 shell 调用该目录中的 makefile Helloworld_rtw.mk,它应该在 unix 平台上创建一个库 Helloworld.so,在 Windows 上创建一个 Helloworld.lib。

    gmake -f Helloworld_rtw.mk build
    

    您可以将您的代码链接到该库,以调用该库中的主函数 Helloworld。调用 Helloworld 的示例 main.c 放置在示例目录下。在将 Helloworld 库添加为链接器选项并包含头文件的路径后,您应该能够将此示例编译为可执行文件。

    要查看它的工作原理,而不是在代码中调用 disp,您可能需要执行一些简单的算术运算,如下所示。这是因为 disp 不会为 lib 目标生成任何代码。

    function [y] = Helloworld(u)
        y = 2*u;
    end
    

    在 ScriptHellowWorld.m 中

    Helloworld(2);
    

    您可以在调用 Helloworld 函数后在您的主函数副本中手动添加 printf 语句。

    【讨论】:

    • 嗨!很抱歉没有早点回复。我尝试用三种方法制作,但都没有奏效。您建议的gmake只是给出“找不到命令”,但我读到xcode将gmake安装为make。运行 make -f Helloworld_rtw.mk build 给出“目标模式不包含 `%'。停止。”。我也尝试过使用 gcc,但这不起作用。
    • @Rkey gmake 与 MATLAB 一起安装:即在我的系统上:/usr/local/MATLAB/R2014a/bin/glnxa64/gmake
    • 我的 /usr/local/ 中没有 MATLAB 文件夹,而 /Applications/MATLAB_R_2015b.app/bin/ 中没有 glnxa64。这条路径可能适用于 windows 或 ubuntu 吗?
    【解决方案2】:

    如果您打算为运行 MATLAB 的同一台机器或具有兼容架构的机器编译代码,您可以让 MATLAB Coder 为您完成编译。假设您想要一个静态库。然后从Build Type 下拉列表中选择它,并确保未选中Generate Code Only。请参阅screenshot 的文档。

    代码生成完成后,MATLAB Coder 将编译代码以在codegen/lib/Helloworld 中生成一个静态库。

    【讨论】:

    • 是的,这正是我想要的!但是,运行这个我收到一个错误。错误是“无法生成所有二进制输出”,我在构建日志中可以找到的最有趣的行是“未定义对 'WinMain' 的引用”。我在谷歌上搜索这个自动取款机,只是想让你知道发生了什么。
    • 您是否选择了“构建类型”下的“可执行文件”?如果是这样,则链接器抱怨它找不到main 函数。对于测试,只需将“构建类型”更改为“静态库”或“动态库”,代码就会编译。如果你想要一个可执行文件,你需要指定一个包含你的 main 函数的 C 文件。 This example 展示了如何做到这一点。
    • 这样做我们会遇到与我们开始时类似的情况。我们得到了 c 代码,但我们无法编译它。至少我不知道如何编译它。
    • 如果您选择静态库或动态库,MATLAB Coder 会为您将 C 代码编译成这样的库,您可以在代码所在的目录中找到该库。 [mathworks.com/help/coder/ug/… page) 展示了如何在 Visual Studio 中使用该库。否则,如果您按照我在上面发布的 [mathworks.com/help/coder/ug/… 进行操作,它将向您展示如何编译和链接可执行文件。
    • 我们只是一步一步地按照这些说明进行了两次。两次 rand 每次都输出相同的值。经过这么多努力来创建一个有缺陷的 .exe 文件,我们认为再进一步是不值得的。
    猜你喜欢
    • 2011-02-22
    • 2011-07-12
    • 2012-01-04
    • 2014-10-15
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多