繁体   English   中英

使用 pybind11 构建库,链接其他共享库

[英]building lib with pybind11 linking other shared lib

我的项目回复了一个 SO 文件,我将通过cmake安装在我的项目文件夹下。当我运行python setup.py install时,它可以工作文件

但是我是通过pip安装的,因为pip会把工程复制到一个tmpfile中,安装后会被删除,SO文件也会被删除。 因此,当我导入我的项目时,由于找不到 SO 文件而失败。

当然,我可以将 SO 文件安装到/usr/local/lib ,但我不想

任何人都有解决它的想法?

您需要使您的共享库在运行时可被发现。 相同的规则适用于常规 C++ 可执行文件。

这里有几个选项(列表可能不完整):

  • 将共享库与其他共享库一起放置(例如/usr/lib/
  • 将带有共享库路径的自定义 conf 添加到/etc/ld.so.conf.d/my_lib.conf
  • 在调用 python 解释器之前设置LD_LIBRARY_PATH
  • 使用LD_PRELOAD运行 python 解释器
  • 将共享库的路径设置为 pybind11 模块的RPATH属性。

我个人使用后一个选项:它允许我自由使用 virtualenv

如果你有轮子 package,你也可以看看auditwheel

auditwheel repair :将这些外部共享库复制到轮子本身,并自动修改适当的 RPATH 条目,以便在运行时获取这些库。 这实现了类似于库已被静态链接而无需更改构建系统的结果。 建议打包者捆绑,如 static 链接,可能涉及版权问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM