在Mac上使用pygccxml包含stdint.h会破坏C代码解析

时间:2018-06-20 22:02:42

标签: macos parsing clang

我尝试在Mac上使用pygccxml解析不同的C标头。

例如,如果我使用以下标头:

#ifndef TEST_STRUCT_H
#define TEST_STRUCT_H

#include <stdint.h> /* for size_t */

struct TestStruct
{
    long a;
    short b;
    char c[32];
} a;

#endif // TEST_STRUCT_H

并使用pygccxml对其进行解析,如下所示:(从单元测试中提取):

test_struct_file = "TestStruct.h"

generator_path, generator_name = utils.find_xml_generator()

xml_generator_config = \
    parser.xml_generator_configuration_t(
        xml_generator_path=generator_path,
        xml_generator=generator_name)

decls = parser.parse([test_struct_file], xml_generator_config)

global_ns = declarations.get_global_namespace(decls[0])

expected_varnames = ["a", "b", "c"]
expected_vartypes = ["long int", "short int", "char [32]"]

for d in global_ns.declarations:
    if declarations.is_struct(d):
        for var, name, ctype in zip(d.variables(),
                                    expected_varnames,
                                    expected_vartypes):
            variable_name = var.name
            variable_type = var.decl_type.decl_string.strip("::")
            assert name == variable_name
            assert ctype == variable_type

一切都很好。

但是,如果我包括

#include <stdint.h> /* for size_t */

在头文件中,测试失败并

>                   assert name == variable_name
E                   AssertionError: assert 'a' == '__routine'
E                     - a
E                     + __routine

因为返回的内容充​​满了不同的东西,但是找不到TestStruct

我不明白这里发生了什么。我该如何解决?

我为此测试使用了Python 3.6.5和pygccxml 1.9.1。 如果我在Ubuntu 16.04系统上执行相同操作,则可以正常工作 (我在那里使用了其他版本的Python和pygccxml)。

0 个答案:

没有答案