编译器和链接器错误
当您从 MATLAB® Coder™ 生成库、MEX 函数或可执行文件时,代码生成器会调用 C/C++ 编译器来编译二进制工件。在此过程中可能会出现编译错误。这些错误可能发生在编译阶段、链接阶段或编译的其他阶段。您可以在代码生成报告的编译日志选项卡上查看编译和链接错误和警告。
出现的具体错误消息和警告取决于您的平台所使用的编译器和工具链。要查看当前编译器或选择不同编译器,请在命令提示符下输入:
mex -setup
出现编译错误有许多不同原因。要诊断和修复错误,您可能需要参考编译器文档中列出的错误消息。下面是在生成代码时可能导致编译错误的一些常见问题。
未指定主函数
指定主函数来生成 C/C++ 可执行文件。如果未指定主函数,将会发生编译错误。主函数包含在单独的主文件中。当您生成代码时,MATLAB Coder 会创建一个示例主文件,但不会自动使用它进行编译。示例主函数使用模拟输入值调用生成的代码。您必须修改示例主函数或创建自己的主函数,以便进行真实的输入和输出处理。
您可以将主文件指定为 codegen
命令的命令行参数,或在 MATLAB Coder 中指定主文件,或使用配置参数来指定主文件。有关详细信息和示例,请参阅:
如果希望代码生成器自动使用生成的示例主文件来编译用于测试目的的可执行文件,可以将配置对象的 GenerateExampleMain
属性设置为 'GenerateCodeAndCompile'
。请参阅使用示例主函数合并生成的代码。
未指定外部代码文件
如果您的代码在 coder.ceval
中使用外部 C 函数,则您必须指定包含这些函数的外部文件,否则可能会出现编译错误。您可以将这些外部文件指定为 codegen
命令的命令行参数,或在 MATLAB Coder 中指定外部文件,或通过使用配置参数来指定外部文件。有关详细信息和示例,请参阅:
外部代码导致的错误
在编译过程中引入外部代码时,外部代码会注入自己的错误。外部代码可以通过多个通道引入:
通过使用在外部头文件中定义的
coder.opaque
创建的外部类型定义。通过使用在外部头文件中定义的
coder.cstructname
创建的结构体类型定义。通过使用
coder.ceval
调用外部代码。codegen
命令的外部编译文件的设定。使用
coder.cinclude
或coder.updateBuildInfo
包含外部代码文件。通过 App 的自定义代码选项卡,或通过代码生成配置参数
CustomSource
和CustomInclude
包含外部代码。
以上所列并非全部。要解决这些方法导致的错误,您必须检查并修复外部代码的问题,或将外部代码与您的 MATLAB 代码解耦。