(原创)clang的python接口(一)

本文介绍了clang的python接口。llvm衍生的clang编译器成熟且有强大开发接口libclang,可进行词法和语法分析。详细讲述了libclang+python bindings在ubuntu 16.04的配置方法,包括安装clang编译器、配置python bindings及运行配置,还推荐了调用模块的方法。

(原创)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 sys
import clang.cindex

from clang.cindex import Config
from clang.cindex import Cursor
from clang.cindex import CursorKind


Config.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.youkuaiyun.com/snsn1984/article/details/25963601
--------------------- 
作者:wangtua 
来源:优快云 
原文:https://blog.youkuaiyun.com/wangtua/article/details/77426883 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值