2014-03-29 24 views
2

我想开始使用libclangPython。我试图让一个示例代码(http://www.altdevblogaday.com/2014/03/05/implementing-a-code-generator-with-libclang/)到的Windows工作,这里是我试图运行的代码的一部分:为什么这个python脚本找不到libclang dll?

#!/usr/bin/python 
# vim: set fileencoding=utf-8 

import sys 
import os 
import clang.cindex 
import itertools 

... 

print("Setting clang path") 
# I tried multiple variations. Libclang is correctly installed in the specified location. 
#clang.cindex.Config.set_library_path('C:/Program Files (x86)/LLVM/bin') 
#clang.cindex.Config.set_library_path('C:/Program Files (x86)/LLVM/bin/libclang.dll') 

# I also tried moving the dll into the Python installation folder. 
clang.cindex.Config.set_library_file('C:/Python27/DLLs/libclang.dll') 
print("Clang path set") 

index = clang.cindex.Index.create() 

... 

我扯下了代码的其他部分,但如果它们相关,我可以发布它们。该生产线

index = clang.cindex.Index.create() 

抛出以下错误:

Setting clang path 
Clang path set 
Traceback (most recent call last): 
    File "D:\libclangtest\boost_python_gen.py", line 60, in <module> 
    index = clang.cindex.Index.create() 
    File "D:\libclangtest\clang\cindex.py", line 2095, in create 
    return Index(conf.lib.clang_createIndex(excludeDecls, 0)) 
    File "D:\libclangtest\clang\cindex.py", line 141, in __get__ 
    value = self.wrapped(instance) 
    File "D:\libclangtest\clang\cindex.py", line 3392, in lib 
    lib = self.get_cindex_library() 
    File "D:\libclangtest\clang\cindex.py", line 3423, in get_cindex_library 
    raise LibclangError(msg) 
clang.cindex.LibclangError: [Error 193] %1 is not a valid Win32 application. To provide a path to libclang use Config.set_library_path() or Config.set_library_file(). 

,这是什么原因呢?我是否设置了dll路径错误?我尝试了多种方式,使用了前景和反斜杠,我也尝试将DLL移出Program Files以使路径不包含空格,但没有任何工作。

我是一个初学libclang和Python的初学者,如果我要求一些微不足道的东西。

+1

确保python和libclang都是32位或64位。另外,请确保您的libclang.dll的路径位于PATH环境变量中。 –

+0

我将它添加到PATH中,但我不认为这是问题,因为我必须用set_library_file函数手动设置路径。我要检查它是32位还是64位,谢谢你的提示! –

回答

3

@ SK-逻辑评论说,我应该检查Python和libclang是否无论是32位或64位。 Libclang是32位,但我找不到一种方法来检查我的Python安装是32位还是64位,所以我重新安装了32位版本,现在它可以工作。所以问题可能是我有64位版本的Python。

+0

您可以在Dependency Walker(depend.exe)中打开EXE,并检查它是32位还是64位。 – cubuspl42

+0

你可以用几种方式检查CPython是32位还是64位,比如'platform.architecture()[0]'; 'sys.version'字符串(MSC构建); “sys.maxsize”是“2 ** 31-1”还是“2 ** 63-1”;或者通过'struct.Struct('P')。size'或'ctypes.sizeof(ctypes.c_void_p)'指针大小是4还是8个字节。 – eryksun

相关问题