为什么这个Python脚本找不到libclang.dll?
我想开始使用libclang和Python。我正在尝试让一段示例代码(http://www.altdevblogaday.com/2014/03/05/implementing-a-code-generator-with-libclang/)在Windows上运行,这里是我尝试运行的代码的一部分:
#!/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完全是个新手,抱歉如果我问的问题很简单。
2 个回答
6
我遇到了一个类似的问题(Windows 7 64位,Anaconda3 64位)。使用
import clang.cindex
clang.cindex.Config.set_library_file('C:/Program Files/LLVM/bin/libclang.dll')
解决了这个问题。请注意,你需要使用斜杠(不是反斜杠),并且要指定bin/libclang.dll的路径(而不是lib/libclang.dll)。
4
@SK-logic 提到我应该检查一下我的 Python 和 libclang 是不是都是 32位或 64位。libclang 是 32位的,但我找不到方法来检查我的 Python 安装是 32位还是 64位,所以我重新安装了 32位版本,现在可以正常工作了。所以问题可能是因为我之前安装的是 64位的 Python。