compiler.build.cSharedLibrary
语法
说明
compiler.build.cSharedLibrary(
使用 FunctionFiles
)FunctionFiles
指定的 MATLAB® 文件创建一个 C 共享库。
compiler.build.cSharedLibrary(
使用一个或多个名称值参量指定选项来创建一个 C 共享库。选项包括库名称、输出目录和要包含的附加文件。FunctionFiles
,Name,Value
)
compiler.build.cSharedLibrary(
使用 opts
)compiler.build.CSharedLibraryOptions
对象 opts
指定选项创建一个 C 共享库。您不能使用名称-值参量指定任何其他选项。
示例
使用生成幻方的函数文件创建 C 共享库。
在 MATLAB 中,找到要部署为 C 共享库的 MATLAB 函数。对于此示例,使用位于文件 magicsquare.m
。matlabroot
\extern\examples\compiler
appFile = fullfile(matlabroot,'extern','examples','compiler','magicsquare.m');
使用 compiler.build.cSharedLibrary
命令构建 C 库。
compiler.build.cSharedLibrary(appFile);
构建函数在当前工作目录中名为 magicsquarecSharedLibrary
的文件夹中创建以下文件:
GettingStarted.html
- 包含有关集成共享库的信息的文件。includedSupportPackages.txt
- 列出库中包含的所有支持文件的文本文件。magicsquare.c
- C 源代码文件。magicsquare.def
- 为链接器提供模块信息的模块定义文件。magicsquare.dll
- 动态链接库文件。magicsquare.exports
- 导出包含所有非静态函数名称的文件。magicsquare.h
- C 头文件。magicsquare.lib
- 导入库文件。mccExcludedFiles.log
- 包含应用程序中未包含的任何工具箱函数列表的日志文件。有关不支持的函数的信息,请参阅 MATLAB Compiler 限制。readme.txt
- 自述文件包含有关部署前提条件的信息以及要打包部署的文件列表。requiredMCRProducts.txt
- 包含 MATLAB Runtime 运行应用程序所需产品的产品 ID 的文本文件。unresolvedSymbols.txt
- 包含有关未解析符号的信息的文本文件。
创建一个 C 库并使用名称-值参量对其进行自定义。
对于此示例,使用位于
中的文件 matlabroot
\extern\examples\compilerflames.m
和 flames.mat
。
appFile = fullfile(matlabroot,'extern','examples','compiler','flames.m'); MATFile = fullfile(matlabroot,'extern','examples','compiler','flames.mat');
使用 compiler.build.cSharedLibrary
命令构建 C 库。使用名称-值参量指定库名称、添加 MAT 文件并启用详尽输出。
compiler.build.cSharedLibrary(appFile,'LibraryName','MyMagicSquare', ... 'AdditionalFiles',MATFile,'Verbose','on');
使用 compiler.build.CSharedLibraryOptions
对象创建多个 C 库。
对于此示例,使用位于文件 magicsquare.m
。matlabroot
\extern\examples\compiler
appFile = fullfile(matlabroot,'extern','examples','compiler','magicsquare.m');
使用 appFile
创建一个 CSharedLibraryOptions
对象。使用名称-值参量指定一个公共输出目录,禁用数据文件的自动检测,并启用详尽输出。
opts = compiler.build.CSharedLibraryOptions(appFile, ... 'OutputDir','D:\Documents\MATLAB\work\CLibraryBatch', ... 'AutoDetectDataFiles','off', ... 'Verbose','on')
opts =
CSharedLibraryOptions with properties:
EmbedArchive: on
LibraryVersion: '1.0.0.0'
FunctionFiles: {'C:\Program Files\MATLAB\R2024b\extern\examples\compiler\magicsquare.m'}
DebugBuild: off
LibraryName: 'magicsquare'
AdditionalFiles: {}
AutoDetectDataFiles: off
ExternalEncryptionKey: [0×0 struct]
ObfuscateArchive: off
SecretsManifest: ''
SupportPackages: {'autodetect'}
Verbose: on
OutputDir: 'D:\Documents\MATLAB\work\CLibraryBatch'
使用 CSharedLibraryOptions
对象构建 C 共享库。
compiler.build.cSharedLibrary(opts);
要使用具有相同选项的函数文件 myMagic2.m
进行编译,请在再次运行构建函数之前使用点符号修改现有 cSharedLibrary
对象的 FunctionFiles
参量。
opts.FunctionFiles = 'myMagic2.m';
compiler.build.cSharedLibrary(opts);
通过修改 FunctionFiles
参量并重新编译,您可以使用相同的选项对象编译多个库。
创建一个 C 库并将有关构建类型、编译文件、包含的支持包和构建选项的信息保存到 compiler.build.Results
对象中。
使用文件 magicsquare.m
进行编译。
results = compiler.build.cSharedLibrary('magicsquare.m')
results = Results with properties: BuildType: 'cSharedLibrary' Files: {4×1 cell} IncludedSupportPackages: {} Options: [1×1 compiler.build.CSharedLibraryOptions]
Files
属性包含以下文件的路径:
magicsquare.dll
magicsquare.lib
magicsquare.h
GettingStarted.html
输入参数
实现 MATLAB 函数的文件,指定为字符向量、字符串标量、字符串数组或字符向量元胞数组。文件路径可以是相对于当前工作目录的路径,也可以是绝对路径。文件必须具有以下扩展名之一:.m
、.p
、.mlx
或 .mexa64
。
示例: ["myfunc1.m","myfunc2.m"]
数据类型: char
| string
| cell
C 库构建选项,指定为 compiler.build.CSharedLibraryOptions
对象。
名称-值参数
以 Name1=Value1,...,NameN=ValueN
的形式指定可选参量对组,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 'Verbose','on'
要包含在 C 共享库中的附加文件和文件夹,指定为字符向量、字符串标量、字符串数组或字符向量元胞数组。路径可以是相对于当前工作目录的路径,也可以是绝对路径。
示例: 'AdditionalFiles',["myvars.mat","data.txt"]
数据类型: char
| string
| cell
标志自动包含数据文件,指定为 'on'
或 'off'
,或者指定为数字或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,而 'off'
等效于 false
。因此,您可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的开/关逻辑值。
如果将此属性设置为
'on'
,则您作为某些函数(例如load
和fopen
)的输入提供的数据文件将自动包含在共享库中。如果将此属性设置为
'off'
,则必须使用AdditionalFiles
选项将数据文件添加到共享库。
示例: 'AutoDetectDataFiles','off'
数据类型: logical
启用调试符号的标志,指定为 'on'
或 'off'
,或者指定为数字或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,而 'off'
等效于 false
。因此,您可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的开/关逻辑值。
如果将此属性设置为
'on'
,则调试符号信息将包含在编译的工件中。此选项还会使mbuild
将相应的调试标志传递到系统编译器。通过调试选项,您可以回溯到可以确定故障是发生在 MATLAB Runtime 的初始化、函数调用还是终止例程中的点。此选项不允许您使用外部调试器调试 MATLAB 文件。如果将此属性设置为
'off'
,则不包括调试符号。这是默认选项。
示例: 'DebugBuild','on'
数据类型: logical
嵌入可部署存档的标志,指定为 'on'
或 'off'
,或者指定为数字或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,而 'off'
等效于 false
。因此,您可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的开/关逻辑值。
如果将此属性设置为
'on'
,则该函数会将可部署存档嵌入共享库中。如果将此属性设置为
'off'
,则该函数会将可部署存档生成为单独的文件。
示例: 'EmbedArchive','off'
数据类型: logical
自 R2024b 起
外部 AES 加密密钥和 MEX 密钥加载程序文件的路径,指定为标量结构,具有恰好两行字符向量或字符串标量字段,分别名为 EncryptionKeyFile
和 RuntimeKeyLoaderFile
。两个结构体字段都是必需的。文件路径可以是相对于当前工作目录的路径,也可以是绝对路径。
例如,使用 struct encrypt.key
将加密密钥指定为 loader.mexw64
并将加载程序文件指定为 keyValueStruct
。
keyValueStruct.EncryptionKeyFile='encrypt.key'; keyValueStruct.RuntimeKeyLoaderFile='loader.mexw64'
加密密钥文件必须采用以下受支持的格式之一:
二进制 256 位 AES 密钥,文件大小为 32 字节
十六进制编码的 AES 密钥,文件大小为 64 字节
MEX 文件加载程序在运行时检索解密密钥,并且必须是具有以下参量的接口:
prhs[0]
- 输入,指定为静态值'get'
的字符数组prhs[1]
- 输入,指定为 CTF 组件 UUID 的字符数组plhs[0]
- 输出,32 字节 UINT8 数字数组或 64 字节十六进制编码字符数组,具体取决于密钥格式
请勿在多个 CTF 之间共享同一个密钥。
示例: 'ExternalEncryptionKey',keyValueStruct
数据类型: struct
C 共享库的名称,指定为字符向量或字符串标量。生成的库的默认名称是 FunctionFiles
参量的第一个条目。
示例: 'LibraryName','mymagic'
数据类型: char
| string
用于混淆处理可部署存档的标志,指定为 'on'
或 'off'
,或者指定为数字或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,而 'off'
等效于 false
。因此,您可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的开/关逻辑值。
如果将此属性设置为
'on'
,则可部署存档中的文件夹结构和文件名将对最终用户进行混淆,并且 MATLAB 文件中包含的用户代码和数据将放入存档内的用户包中。此外,所有.m
文件在打包之前都会转换为 P 文件。此选项等效于使用指定-j
和-s
的mcc
。如果将此属性设置为
'off'
,则可部署存档不会被混淆。这是默认行为。
示例: 'ObfuscateArchive','on'
数据类型: logical
保存构建文件的输出目录的路径,指定为字符向量或字符串标量。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。
构建文件夹的默认名称是库名称加上 cSharedLibrary
。
示例: 'OutputDir','D:\Documents\MATLAB\work\mymagiccSharedLibrary'
数据类型: char
| string
自 R2024b 起
机密清单 JSON 文件的路径,该文件指定要嵌入可部署存档中的机密密钥,指定为字符向量或字符串标量。该路径可以是相对于当前工作目录的路径,也可以是绝对路径。
如果您的 MATLAB 代码调用 getSecret
、getSecretMetadata
或 isSecret
函数,您必须在 JSON 机密清单文件中指定要嵌入可部署存档的密钥。如果您的代码调用 getSecret
并且您未指定 SecretsManifest
选项,MATLAB Compiler™ 会发出警告并在名为
的输出文件夹中生成一个模板 JSON 文件。通过在嵌入字段中指定密钥名称来修改此文件。<component_name>
_secrets_manifest.json
setSecret
函数不可部署。要将机密嵌入可部署存档中,您必须在构建存档之前在 MATLAB 中调用 setSecret
。
有关使用密钥进行部署的更多信息,请参阅处理已部署应用程序中的敏感信息。
示例: 'SecretsManifest','D:\Documents\MATLAB\work\mycomponent\mycomponent_secrets_manifest.json'
数据类型: char
| string
要包含的支持包,指定为以下选项之一:
'autodetect'
(默认)- 依赖关系分析过程会自动检测并包含所需的支持包。'none'
- 不包括任何支持包。使用此选项可能会导致运行时错误。字符串标量、字符向量或字符向量元胞数组- 仅包含指定的支持包。要列出已安装的支持包或特定文件使用的支持包,请参阅
compiler.codetools.deployableSupportPackages
。
示例: 'SupportPackages',{'Deep Learning Toolbox Converter for TensorFlow Models','Deep Learning Toolbox Model for Places365-GoogLeNet Network'}
数据类型: char
| string
| cell
用于控制构建详细程度的标志,指定为 'on'
或 'off'
,或者指定为数字或逻辑值 1
(true
) 或 0
(false
)。值 'on'
等效于 true
,而 'off'
等效于 false
。因此,您可以将此属性的值用作逻辑值。该值存储为 matlab.lang.OnOffSwitchState
类型的开/关逻辑值。
如果将此属性设置为
'on'
,则 MATLAB 命令行窗口将显示进度信息,指示构建过程中的编译器输出。如果将此属性设置为
'off'
,则命令行窗口不会显示进度信息。
示例: 'Verbose','on'
数据类型: logical
输出参量
编译结果,以 compiler.build.Results
对象形式返回。Results
对象包含:
编译类型,即
'cSharedLibrary'
以下编译文件的路径:
LibraryName
.dllLibraryName
.libLibraryName
.hGettingStarted.html
包含的支持包的列表
编译选项,指定为
CSharedLibraryOptions
对象
版本历史记录
在 R2021a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)