疑难解答编译器问题

编译器版本不匹配错误

描述

构建过程中产生的编译器版本不匹配错误。

行动

  1. 检查列表支持和兼容的编译器可在万博1manbetxwww.tianjin-qmedu.com/万博1manbetxsupport/compilers/current_release/

  2. 升级或更改您的编译器。欲了解更多信息,请参阅选择和配置编译器

  3. 重建模型。

结果模型仿真和程序执行迥异

描述

用于模型生成的程序产生从模型的仿真结果不同的结果。生成的源代码包括产生一个符号整数溢出的算术运算。这可能是你的编译器没有实现包装行为符号整数溢出条件。或者,如果您使用的编译器,支持环绕,有可能是你没有将其配置为使用万博1manbetx-fwrapv选项。

欲了解更多信息,请参阅“代码生成器凭借C语言中的整数溢出的未定义的行为。”

行动

  • 如果你的编译器可以强制包装的行为,将其打开。例如,对于基于GCC,如MinGW的gcc编译器或编译器,指定编译器选项-fwrapv

  • 选择一个编译器整数溢出检查。

  • 如果您有嵌入式编码®,开发和应用代码替换库替换符号整数生成的代码。

产生预期的代码和产生意外结果

描述

构建过程产生预期的源代码,但可执行程序产生意外的结果。生成的源代码出现预期。然而,可执行程序会产生意想不到的效果。

行动

执行下列操作之一:

  • 降低编译器的优化程度。

    1. 设置编译器优化级别配置参数习惯

    2. 在里面自定义编译器优化标志字段中,指定一个较低的优化水平。

    3. 重建模型。

  • 禁用编译器优化。

    1. 编译器优化级别关闭优化(更快的版本)

    2. 重建模型。

欲了解更多信息,请参阅控制编译器优化和你的编译器文档。

编译时的问题

问题 行动

错误存在于编译器配置。

确保MATLAB®万博1manbetx支持编译器和版本,您要使用。对于当前支持和兼容的编译器的列表,请参阅万博1manbetxwww.tianjin-qmedu.com/万博1manbetxsupport/compilers/current_release/。如果必要的话,升级或更改你的编译器(见选择和配置编译器要么选择和配置编译器)。

环境变量正确设置你的化妆工具,编译器或连接器。例如,在Windows平台上安装的Cygwin的工具,会影响其他编译器环境变量。

通过检查你的系统环境变量的设置在Windows平台上的命令或SETENV在Linux®平台。确保设置匹配的内容需要您所使用的工具。

错误存在于指定为自定义代码S-功能阻断或在自定义代码。例如,该代码是指编译器不能找到的头文件。

为了找出问题的根源,从模型中移除,调试的自定义代码和重建模型。

该模型包括一个块,诸如设备驱动器块,其不用于与当前选择的系统目标文件的使用。

卸下系统目标文件特定块或配置模型与其他系统的目标文件使用。

当模型构建从模型引用层次生成一个可执行程序并在这些条件都为真,将出现大约一个未定义的参照数据链接器错误:

  • 通过创建代表的数据对象,如信号,状态或参数数据万博1manbetxSimulink.Signal。您在模型引用层次的对象。

  • 您可以使用自定义的存储类数据对象。自定义存储类需要嵌入式编码。

  • 你的对象的所有者设置为不直接访问数据的模型。

  • 您可以使用工具链LCC-Win64平台

要解决此问题,选择这些方法之一:

  • 在数据对象中,清除所有者属性。可替代地,所有者设定为模型直接访问数据。

  • 使用不同的工具链,如GCC, 代替LCC

LCC编译器不支持在&符号源文件夹路径万博1manbetx

描述

如果您使用LCC编译器和模型文件夹路径包含符号(),构建过程产生错误。

行动

从模型中移除文件夹路径的符号。然后,重建模型。

LCC编译器快速加速器代码的可能不支持线长万博1manbetx

描述

如果您正在编译快速加速器代码时,LCC编译器可能会产生与线限制的错误。快速加速器代码可以具有较长的线路长度由于混淆。

行动

使用支持长行代码编译器编译你快速加速的代码。万博1manbetx

相关话题

外部网站