主要内容

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

修复使用 Polyspace 头文件导致的错误

问题

当使用 Polyspace® 分析 C/C++ 源代码时,如果您未提供编译器头文件的路径,Polyspace 将使用自己的头文件版本进行分析。

在某些情况下,您可能会遇到由这些 Polyspace 头文件引起的编译错误。错误消息通常会引用 polyspaceroot\polyspace\verifier\cxx\include 的一个子文件夹。其中,polyspaceroot 是 Polyspace 的安装文件夹,例如 C:\Program Files\Polyspace\R2025a。这类错误消息通常与标准库函数有关。

例如,在分析以下 C++14 代码时,您可能会在 std::is_empty 处看到一个错误:

#include <type_traits>

struct S final { };

bool f(void) {
    return std::is_empty<S>::value;
}
错误消息如下:
Error: a "final" class type cannot be used as a base class
并指向路径 polyspaceroot\polyspace\verifier\cxx\include\include-libcxx\type_traits。此错误的发生是因为,在某些情况下,Polyspace 头文件中对 std::is_empty 的实现不允许其实例化对象使用 final 类。

可能的解决方案

指定包含您的编译器头文件的文件夹,用于 Polyspace 分析。

如果您使用 polyspace-configure 从编译命令创建 Polyspace 工程或选项文件,则编译器头文件路径会自动添加到该工程或选项文件中。否则,您必须显式添加以下路径:

  • 在用户界面中,将文件夹添加到工程中。

    有关详细信息,请参阅在 Polyspace 用户界面中添加要分析的源文件

  • 在命令行中,使用 -I 标志搭配 polyspace-bug-finderpolyspace-bug-finder-server 命令添加路径。

    有关详细信息,请参阅 -I

在基于 UNIX® 的平台上使用 GNU® C 进行编译时,请使用 /usr/include。在嵌入式编译器中,头文件通常位于编译器安装文件夹的子文件夹中。以下是一些编译器的示例文件夹。

  • Wind River® Diab:例如,/apps/WindRiver/Diab/5.9.4/diab/5.9.4.8/include/

  • IAR 嵌入式工作台:例如,C:\Program Files\IAR Systems\Embedded Workbench 7.5\arm\inc

  • Microsoft® Visual Studio®:例如,C:\Program Files\Microsoft Visual Studio 14.0\VC\include

请参阅编译器文档,了解编译器头文件的路径。或者,请参阅为 Polyspace 分析提供标准库头文件

另请参阅

主题