主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 C 共享库编译器创建 C 包

支持的平台:Windows®、Linux®Mac

此示例演示了如何使用 C 共享库编译器将一个 MATLAB® 函数打包到 C 共享库中。您可以在一个提供的 C 应用程序中调用该包,该应用程序会显示谢尔皮金斯基三角形分形。

在 R2025a 之前的版本中: 使用库编译器创建一个 C 共享库,具体操作请参阅使用 MATLAB 代码创建 C 共享库 (R2024b)

前提条件

  • 请确认您已安装与 MATLAB Compiler SDK™ 兼容的 C 编译器。有关各平台支持的 C 编译器列表,请参阅 MathWorks® 网站上的支持和兼容的编译器

  • 最终用户必须安装 MATLAB Runtime 才能运行应用程序。有关详细信息,请参阅下载并安装 MATLAB Runtime

    出于测试目的,您可以使用安装的 MATLAB 来代替 MATLAB Runtime

编写可部署的 MATLAB 代码

在 MATLAB 中,检查您想要打包的 MATLAB 代码。此示例使用 matlabroot \extern\examples\compilersdk\c_cpp\triangle 目录中的这些文件:

MATLAB 函数 sierpinski.m
C 应用程序代码 triangle.c

函数 sierpinski.m 采用一种简单的迭代算法生成名为谢尔皮金三角形的分形图形。主程序可选地接受一个数字参量,该参量指定用于生成分形图案的点数。例如,triangle 8000 生成一个包含 8,000 个点的图。

在 MATLAB 命令提示符下,将随 MATLAB 一起提供的 triangle 文件夹中的所有内容复制到一个新文件夹,并将其命名为 TriangleProject

copyfile(fullfile(matlabroot,"extern","examples", ...
    "compilersdk","c_cpp","triangle"),"TriangleProject")

检查函数 sierpinski.m

function [x, y] = sierpinski(iterations, draw)

% SIERPINSKI Calculate (optionally draw) the points in Sierpinski's triangle
% Copyright 2004-2018 The MathWorks, Inc.

    % Three points defining a nice wide triangle
    points = [0.5 0.9 ; 0.1 0.1 ; 0.9 0.1];

    % Select an initial point
    current = rand(1, 2);

    % Create a figure window
    if (draw == true)
        f = figure;
        hold on;
    end

    % Pre-allocate space for the results, to improve performance
    x = zeros(1,iterations);
    y = zeros(1,iterations);

    % Iterate
    for i = 1:iterations

        % Select point at random
        index = floor(rand * 3) + 1;

        % Calculate midpoint between current point and random point
        current(1) = (current(1) + points(index, 1)) / 2;
        current(2) = (current(2) + points(index, 2)) / 2;

        % Plot that point
        if draw, line(current(1),current(2),'Marker','.','MarkerSize',1);, end
        x(i) = current(1);
        y(i) = current(2);

    end

    if (draw)
        drawnow;
    end
    

创建工程和编译任务

使用 C 共享库编译器创建 C 共享库的编译任务。编译器任务允许您为特定部署目标编译工程中的文件。

要打开该 App,在 App 选项卡上,展开 App 图库。在应用程序部署部分,点击 C 共享库编译器

Application Deployment section of the Apps gallery

您还可以在 MATLAB 命令行窗口中使用 cSharedLibraryCompiler 函数打开该 App。

打开 App 后,“创建编译器任务”对话框会提示您将编译器任务添加到新的或现有 MATLAB 工程中。在此示例中,选择启动新工程并创建编译器任务,并在工作文件夹中创建一个名为 TriangleProject 的新工程。有关创建和使用 MATLAB 工程的详细信息,请参阅创建工程

Create compiler task dialog box with the text 'To deploy your MATLAB code, you need a MATLAB project to organize code and a compiler task to handle deployment.' The option 'Start a new project and create a compiler task' is selected.

编辑器中打开了一个名为 CSharedLib1 的新编译任务。您可以通过打开编译器任务管理器或转到管理任务选项卡并创建一个新的编译器任务来编译其他部署目标的代码。

指定编译选项

在打包之前,您可以为 C 共享库及其安装程序指定选项,以自定义构建和打包过程。例如,您可以混淆处理 MATLAB 代码,或指定在生成的安装程序中包含 MATLAB Runtime 的方法。

将 MATLAB 函数添加到 C 共享库中。所有文件必须位于工程根文件夹中才能添加到工程中。在此示例中,在编译器任务的导出的函数部分,点击添加文件,然后选择 sierpinski.m。在“工程”面板中,该文件现在带有标签 DesignExported Function File

Exported file section of the compiler task with no file selected and a button labeled Add Exported Function

包信息部分,将字符串 My C Package 替换为您的 C 共享库名称,即 libtriangle

查看代码和包 C 的共享库

要查看包含有关构建和打包组件的说明的代码,请点击导出编译脚本旁边的箭头,然后选择显示代码。在右侧,一个窗口显示了一个部署脚本,其中包含与您的构建选项相对应的 compiler.build.cSharedLibrarycompiler.package.installer 函数。您可以通过点击导出编译脚本按钮将此代码转换为 MATLAB 脚本文件。运行生成的构建脚本与点击编译和打包按钮等效。

Two buttons labeled Export Build Script and Build and Package

要创建 C 共享库和安装程序,请点击编译和打包。要仅创建 C 共享库,请点击编译和打包旁边的箭头,然后选择编译

编译器会在工程文件夹中的 <compiler_task_name>/output 文件夹中生成文件。有关生成的文件的详细信息,请参阅打包 MATLAB 函数后生成的文件

如果您创建了安装程序,package 子文件夹中包含您的共享库文件的安装程序以及 MATLAB 运行时

小心

生成的安装程序不包含 C 应用程序可执行文件。您必须在打包后使用 mbuild 编译并链接您的 C 应用程序。然后,手动分发应用程序文件以及 MATLAB Runtime,或者使用 compiler.package.installerAdditionalFiles 选项将可执行文件包含在安装程序中。有关详细信息,请参阅将 MATLAB Compiler SDK 文件分发给应用程序开发人员

编译并运行 C 应用程序

创建 C 共享库后,编写一个调用包中 MATLAB 函数的 C 应用程序的源代码。

本示例中包含的 C 应用程序名为 triangle.c

 triangle.c

将生成的共享库 libtriangle.lib 复制并粘贴到包含 C 应用程序的工程文件夹中。

注意

.lib 是 Windows 中使用的扩展名。在 macOS 上,文件扩展名为 .dylib,在 Linux 上为 .so

在 MATLAB 提示符或系统命令提示符下使用 mbuild 编译并链接应用程序。此命令使用您的 C 编译器编译并链接代码与生成的 C 共享库 MATLAB Compiler SDK

mbuild triangle.c libtriangle.lib

从系统命令提示符运行应用程序。要在部署前在 MATLAB 中测试应用程序,请使用感叹号 (!) 运算符运行可执行文件。

triangle.exe 8000

该应用程序显示了具有 8,000 个点的谢尔皮金斯基三角形图形。

Sierpinski's Triangle fractal

要在 MATLAB 外部运行 C 应用程序,您必须安装 MATLAB 运行时。有关详细信息,请参阅下载并安装 MATLAB Runtime。如果您使用编译和打包创建安装程序,该安装程序将包含与用于编译 C 共享库的 MATLAB 版本相匹配的 MATLAB 运行时版本。

要部署 C 应用程序,请将共享库和可执行文件 .exe 分发给最终用户。

另请参阅

| | |

主题