使用libclang分析C代码时如何指定目标平台?

时间:2019-04-03 16:24:37

标签: gcc libclang

我正在使用使用Clang(版本6.0.1)的源代码分析工具。我要分析的源代码是为ARM处理器编写的,将使用arm-none-eabi-gcc进行编译。我的工具正在Linux或Windows上运行。如何告诉libclang针对目标平台而非主机平台分析此代码?

当调用clang_indexSourceFile(...)分析源代码时,我给它提供了与arm-none-eabi-gcc相同的-D和-I选项,包括由arm-none隐式添加的选项-eabi-gcc。这些可以通过运行以下命令获得:

arm-none-eabi-gcc -v -dM -E - </dev/null

我还将这些ARM_specific标志传递给arm-none-eabi-gcc和clang_indexSourceFile(...):-mcpu = cortex-m4 -mthumb -mfpu = fpv4-sp-d16 -mfloat-abi = hard < / p>

仍然,libclang使用与主机平台(Linux或Windows)匹配的内置类型大小,而不是目标平台(Arm)。以下是对此进行测试的一种方法,公认的是人为设计的代码:

int c = 1;
switch (c) {
    case sizeof(long double): return 1;
    case 16: return 2;
    default: return 0;
}

当我使用libclang分析此代码时,得到诊断“重复大小写值'16'”,证明它假定long double是16个字节。使用arm-none-eabi-gcc时,不会出现此错误(但是当我将16替换为8时会遇到类似的错误)。

1 个答案:

答案 0 :(得分:0)

在clang_indexSourceFile(...)调用中使用-target arm-none-eabi作为选项。感谢Ivan Kosarev提出此解决方案的建议。