(原创)clang的python接口(一)
来源:互联网 发布:梦幻西游数据错误 编辑:程序博客网 时间:2024/06/07 09:00
- 原创clang的python接口一
- 背景
- libclang的python接口配置
- 小结
- 参考文献
(原创)clang的python接口(一)
背景
众所周知,llvm是一个十分强大的编译器前段,由此衍生出的clang编译器已经十分成熟,大有在将来取代gcc的趋势。同时,clang也提供了强大的开发接口libclang,可以十分有效的进行词法和语法分析的工作。
libclang的python接口配置
下面是python bindings 的github镜像
python bindings for libclang
接下来介绍一下libclang+python bindings的配置方法:(ubuntu 16.04)
(1)首先安装clang编译器
可以采用apt来进行安装。
sudo apt-get install clang
如果想安装较新版本例如4.0.1(包括libfuzzer支持),建议去官网下载之后进行本地编译和配置,具体方法不再赘述。
(2)配置python bindings
同样存在两种办法
1)使用pip进行安装
sudo pip install clang==版本号
2)或者去https://pypi.python.org/pypi这个网站上去寻找对应的包clang (版本号)。解压之后采用
python setup.py install
进行安装。
这里应该注意:
1)建议使用第一种办法进行安装。
2)无论是采用哪种办法,都必须注意clang的版本号和python bindings的版本号是否一致,否则容易出现问题。
(3)最后是配置运行,在参考内容[1]里面由这样的一段话:
Setting up
Setting up usage of the Python bindings is very easy:
Your script needs to be able to find the clang.cindex module. So either copy it appropriately or set up PYTHONPATH to point to it [4].
clang.cindex needs to be able to find the libclang.so shared library. Depending on how you build/install Clang, you will need to copy it appropriately or set up LD_LIBRARY_PATH to point to its location. On Windows, this is libclang.dll and it should be on PATH.
That arranged, you’re ready to import clang.cindex and start rolling.
这个办法笔者试过,但是效果不好,因此在这里推荐另外一种办法:
在调用模块中的方法和类的时候,首先声明libclang.so的位置:
import sysimport clang.cindexfrom clang.cindex import Configfrom clang.cindex import Cursorfrom clang.cindex import CursorKindConfig.set_library_file("/usr/lib/llvm-4.0/lib/libclang-4.0.so.1")#上面这行声明的libclang的位置。index = clang.cindex.Index.create()tu = index.parse(sys.argv[1])print tu.get_extent('li.cpp', (4, 10)).begin_int_data
这样就可以在python中调用libclang的相关类和方法了。
小结
虽然clang给出了基于ctypes的python的绑定,但是却没有提供文档,所以得靠开发者自己去阅读cindex.py的代码来进行开发,关于这一点,我会在日后在细叙。
参考文献:
http://blog.csdn.net/snsn1984/article/details/25963601
- (原创)clang的python接口(一)
- (原创)clang的python接口教程(二)
- 深入研究Clang(一)Clang和LLVM的关系及整体架构
- 基于Clang的Source to Source源代码转换(一)
- clang static analyzer源码分析(一)
- Clang 宏定义初探(一)
- 深入研究Clang(四) Clang编译器的简单分析
- 深入研究Clang(四) Clang编译器的简单分析
- (原创)基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集(非常好)
- 打造基于Clang LibTooling的iOS自动打点系统CLAS(一)
- llvm+clang的安装(使用cmake)
- [原创]我的Javascript(一)
- [原创]网络分析的前置知识(一)
- python接口自动化测试(一)
- python 接口自动化测试(一)
- clang源码——CompilerInstance和Preprocessor(一)
- clang——CFG构成与生成(一)
- Delphi下的接口编程学习笔记(原创)
- 最长公共子序列学习篇。动态规划
- spring mvc 内外部视图
- xxxxxxxxxx
- 【HDU1556-color the ball】(树状数组)
- A. Counting Kangaroos is Fun----暴力
- (原创)clang的python接口(一)
- spark-1.2.0 集群环境搭建(完整一套)
- wordpress开发
- spring事务的更新丢失
- [编程题] 消除重复元素
- codeforces 831A Unimodal Array
- Android Selector选择器点击按下之后没有出现预想的效果
- codeforces 817C
- BZOJ 1046: [HAOI2007]上升序列 LIS