1 背景说明

  最近希望利用开源库来解析C++头文件,并做一些自动翻译、自动注释之类的工作。经过两天的调研,发现clang最有希望满足需求。clang提供了三套接口来共外部使用,liblang最适合作为独立工具开发使用。不过提供的原生接口是C++的,成本略高,本文记录下libclang的Python接口使用方法。

  相关文档及下载链接如下:

  clang(llvm) 接口官方文档:http://clang.llvm.org/docs/Tooling.html

  clang(llvm) 下载页面(源码/二进制):http://releases.llvm.org/download.html#8.0.0

  llvm非官方Python接口工程(不需要单独下载):https://github.com/llvm-mirror

2 clang(llvm) Python接口安装

  MacOSX平台的方法可以参考这篇文章《Parsing C++ in Python with Clang

  Windows平台安装方法如下:

  (1)安装 clang(llvm) 可执行二进制包,请看前文的clang(llvm)下载页面;

  (2)安装clang 的Python三方库:

pip install clang==版本号     # 我这里没有输入版本号也没问题

或者

python setup.py install      # 自行下载clang(llvm)的Python工程

  (3)在Python工程中需要指定 libclang.dll (Linux平台对应是libclang-8.0.so.1)所在路径,可以自行搜索一下(例如现在是 C:\Program Files\LLVM\bin\libclang.dll )

from clang.cindex import Config
from clang.cindex import Index

libclangPath = r'C:\Program Files\LLVM\bin'
if Config.loaded:
    pass
else:
    print 'Load'
    Config.set_library_path(libclangPath)

  (4)参考文章:http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/

  核心来讲,libclang是个共享库,其接口能力集中在 clang/include/clang-c/Index.h,libclang附带了Python绑定,它位于clang/bindings/python中,位于模块clang.cindex中。该模块依赖于ctypes来加载动态libclang库,并尝试使用Pythonic API尽可能多地包装libclang

利用Clang(Python接口)来解析C++的更多相关文章

  1. Caffe学习系列(13):数据可视化环境(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  2. Python之XML解析详解

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  3. caffe(13) 数据可视化(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  4. Caffe学习系列(11):数据可视化环境(python接口)配置

    参考:http://www.cnblogs.com/denny402/p/5088399.html 这节配置python接口遇到了不少坑. 1.我是利用anaconda来配置python环境,在将ca ...

  5. python中html解析-Beautiful Soup

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  6. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  7. Windows7 64下搭建Caffe+python接口环境

    参考链接: http://www.cnblogs.com/yixuan-xu/p/5858595.html http://www.cnblogs.com/zf-blog/p/6139044.html ...

  8. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  9. 利用阿里大于接口发短信(Delphi版)

    阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...

随机推荐

  1. 性能测试LR学习笔录 -2

    LoadRunner基本测试流程: 制定性能测试计划(部分)  -> 创建测试脚本 -> 编译.运行测试脚本 -> 创建场景 - > 运行.监控场景.收集数据  -> 生 ...

  2. Aforge.net识别简易数字验证码问题

    参考:https://www.bbsmax.com/A/rV57LjWGdP/ https://blog.csdn.net/louislong007/article/details/47683035 ...

  3. 将JPA出参Iterable转为List

    Iterable<Entity> geted = entityDao.findAll();  List<Entity> list = Lists.newArrays();  g ...

  4. Python 子进程不能input

    from threading import Thread from multiprocessing import Process def f1(): name = input('请输入名字') #EO ...

  5. servlet之servlet(二)

    ·servlet用于创建返回基于客服请求的动态页面(整个).部分页面.与数据库交互 ·servlet接口: 继承servlet接口后,要在web.xml中配置和映射servlet.配置servlet初 ...

  6. 定时清理elasticsearch

    索引这种格式 以下脚本加入crontab #每天清理es数据 0 1 * * * /data/sh/rm_esindex.sh >> /data/logs/crontab/rm_esind ...

  7. 监测NGINX服务的shell脚本

    Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 偶尔会出现以下情况的:php-cgi 进程突然消失 ...

  8. Java 并发开发:Lock 框架详解

    摘要: 我们已经知道,synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多 ...

  9. Python 安装第三方库中常见问题总结

    1.安装某个库时,例如 pip install tinify 出现Permission denied时,在安装命令的最前面添加sudo 例如: sudo pip install tinify 即可. ...

  10. ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)

    ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台 参考:http://www.tuicool.com/articles/R77fieA 我在做ELK日志平台开始之初选择为 ...