我想使用CFFI在Python中访问一些C库。在构建库之后,我得到了两个文件:$HOME/libcint/include/cint.h和$HOME/libcint/lib/libcint.so。
现在,对于CFFI模式,我尝试了:
from cffi import FFI
libcint_dir = os.path.expanduser('~/libcint')
ffibuilder = FFI()
ffibuilder.set_source('_libcint',
r'#include <include/cint.h>',
include_dirs = [libcint_dir],
libraries = ['libcint'],
library_dirs = [os.path.join(libcint_dir, 'lib')],
)但是它找不到libcint.so文件:
/usr/bin/ld: cannot find -llibcintlibcint_dir中的路径是正确的,因为我没有收到任何关于没有找到头文件的错误消息。此外,我还成功地使用ctypes模块对库进行了接口,因此libcint.so本身应该很好。
我在这里做错什么了?
如果我做得对,那么这里需要三个步骤。(如果我搞错了,请纠正我。)
libcint.so我在这里的问题是关于第二步。
发布于 2017-11-28 17:03:05
您说的是libraries = ['libcint'],这意味着编译器将查找一个名为liblibcint.so的文件。因此,您应该编写的是libraries = ['cint']。
发布于 2017-11-27 13:47:56
您可能被编译时与库的运行时位置问题所困扰。你给图书馆的路径只在GCC编译的时候使用。在运行时,它只查找具有正确名称的库,但只使用系统配置的默认路径。所以你需要告诉系统在哪里可以找到那个图书馆。你可以做以下之一:
/usr/local/lib这样的标准地方;LD_LIBRARY_PATH=/path/to/library运行;这都是假设Linux。在不同的平台上,这三种选择可能也是可用的,但细节不同.
https://stackoverflow.com/questions/47508459
复制相似问题