我想使用Clang's static analyzer来分析并行代码,即需要MPI编译器包装器的代码。但是,在使用CMake进行配置时,我总是得到
$ scan-build cmake /path/to/source
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer
-- Check for working CXX compiler: /usr/share/clang/scan-build/c++-analyzer -- works随后的编译(make)将失败,并显示
/usr/include/some/header.hpp:56:17: fatal error: mpi.h: No such file or directory#include "mpi.h“
如何在这里正确使用scan-build?
发布于 2016-01-28 04:01:54
我还没有找到在scan-build中直接使用MPI编译器包装器的方法。但是,您可以绕过包装器,将标志手动提供给编译器。例如,这适用于我的环境:
$ export CXXFLAGS=`mpicxx --showme:compile`
$ export LDFLAGS=`mpicxx --showme:link`
$ export CXX=`mpicxx --showme:command`
$ scan-build ./configure && scan-build make #Or your cmake equivalent不同版本的--showme:标志似乎略有不同,但mpicc --showme:help通常会给出特定包装器支持的命令列表。
发布于 2016-07-25 01:44:03
要调用Clang Static Analyzer,建议使用用Python语言实现的scan-build包。您可以使用LLVM主干(
llvm/tools/clang/tools/scan-build-py/bin)中包含的脚本,也可以使用pip install scan-build安装这些脚本。请注意,在make install上,LLVM会将脚本的旧Perl版本复制到/usr/local/bin,因此这可能会覆盖使用pip安装的版本。
由于MPI wrapper编译器会干扰扫描构建脚本,因此建议基于intercept-build (make|ninja|...)生成的编译数据库调用分析。请注意,CMake生成的数据库可能与intercept-build生成的数据库不同。如果compile_commands.json文件将mpicc|mpic++表示为所使用的编译器,则不会发出任何报告。
编译数据库创建完成后,可以通过以下方式触发分析:
analyze-build --enable-checker your.check --use-analyzer /path/to/clang
发布于 2015-09-08 06:29:32
你需要为你的c编译器准备一个MPI包装器。这意味着一个用CLang编译的MPI库。获得该命令后,需要将构建环境中的c编译器设置为mpicc。这将为您提供正确的包含和链接选项。
https://stackoverflow.com/questions/32446755
复制相似问题