正确的方法来制作和使用Rust共享库?

时间:2014-08-24 02:47:32

标签: shared-libraries rust rust-cargo

我正在为cpp库进行绑定。 为此,我为库编写了一个capi / wrapper,并将其编译为共享库(.so文件)。

我的问题是,如何在不强迫用户安装的情况下使用并将此文件集成到货物中?目前我通过从Cargo.toml中的build变量调用的Makefile构建cpp,但我不确定如何处理已编译的lib。

为了进行测试,我可以使用rpath或LD_LIBRARY_PATH将可执行文件指向正确的位置,但在分发库时这不起作用。

人们如何管理这个?

1 个答案:

答案 0 :(得分:3)

首先,确定您是否真的需要共享库。从您的问题中不清楚,但是如果您将您自己的包装器编译到共享库中,这可能是不必要的 - 您可以将代码编译到静态库中并将其直接链接到您的可执行文件中。

此外,您也可以尝试静态链接该第三方库。我不认为这应该很难。是的,你需要在清单中使用build命令来完成所有这些。

但是,如果您仍然需要使用共享库,并且您不希望最终用户自己安装它(这很奇怪,因为这是共享库的),您有手动分发它。例如,您可以编写一个makefile来汇编用户可以提取和使用的存档。为了让您的程序正确找到库,您可以让用户将此存档安装到系统根目录(例如Linux上的/usr;然后将自动定位此共享库)或者您必须编写小shell脚本包装您的可执行文件,它将找到共享库并设置适当的LD_LIBRARY_PATH

我会选择第一条路。通常所有主要平台都提供了创建安装包的方法(deb / rpm / pkg.tar.xz / Linux上的任何东西,Mac上的brew,Windows上的Windows安装程序,尽管在Windows上你可以将你的共享库放在与可执行文件,它将工作)。您只需为用户使用的平台创建软件包,因此您的程序将安装在正确的目录中,您的共享库将自动解析。