到目前为止,我已经做到了:
MANIFEST.in
,使用:include path/to/libfoo.so
setup.py
,在调用setupt.py install
之后,将libfoo.so
放入/usr/local/lib/python/site-packages/foo.egg/path/to/libfoo.so
。在当然,这无助于Python在运行时需要时找到libfoo
。我需要做些什么才能让Python真正找到这个库?在
这个库没有Python绑定,它只是一个共享库,其中包含一些本机代码。它从位于/usr/local/lib/python/site-packages/foo.egg/path/wrapped.cpython-36m-x86_64-linux-gnu.so
中的另一个共享库调用。在
如果要硬编码共享库的位置,可以使用
rpath
选项。为此你会做一些类似。。在在哪里设置.py上面是用于构建
wrapped.cpython-36m-x86_64-linux-gnu.so
的脚本,rpath
是libfoo.so
的路径。当然,您应该能够将其直接放入构建脚本中,具体取决于该过程的外观。在如果不能更新
wrapped.cpython-36m-x86_64-linux-gnu.so
的生成过程,我认为您唯一的选择是将libfoo.so
放在加载库路径中的某个位置,或者在运行时手动添加该位置。在为了回答你接下来的几个问题。。。在
系统加载库位置来自
/etc/ld.so.conf
,并引用ld.so.conf.d
目录中的位置。ldconfig
命令根据此数据重建共享库的缓存,因此如果您更改了某些内容,请务必调用此命令。在在命令行或在
.bashrc
中,可以使用export LD_LIBRARY_PATH=....
将其他目录添加到搜索路径中。在可以手动加载共享对象。请参见https://docs.python.org/2/library/ctypes.html加载共享库。在
我自己没有尝试过,但是我读过,如果你在python代码中手动加载一个下级共享库,然后导入更高级别的库,那么链接器就不必再去寻找较低的库了,因为它已经加载了。这看起来像。。。在
^{pr2}$在StackOverflow上有很多关于如何做到这一点的例子,还有很多关于操作库搜索路径的附加信息/示例。在
相关问题 更多 >
编程相关推荐