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

时间:2019-09-30 14:15:25

标签: python c++ pybind11

我的项目回复了一个SO文件,我将通过安装在项目文件夹下的cmake来使它生效。当我运行python setup.py install时它会起作用。

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

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

有人想解决吗?

2 个答案:

答案 0 :(得分:1)

如果您有轮子包装,也可以看看auditwheel

auditwheel repair:将这些外部共享库复制到转盘本身,并自动修改适当的RPATH条目,以便在运行时提取这些库。就像在不更改构建系统的情况下静态链接库一样,这可以实现类似的结果。建议打包人员,像静态链接一样,捆绑可能会涉及版权问题。

答案 1 :(得分:0)

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

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

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

我个人use是后一种选择:它允许我自由使用virtualenv