luk*_*uke 5 shared-libraries rust rust-cargo
我正在研究 cpp 库的绑定。为此,我为该库编写了一个 capi / 包装器,并将其编译为共享库(.so 文件)。
我的问题是,如何使用该文件并将其集成到货物中而不强制用户安装它?目前,我通过从 Cargo.toml 中的构建变量调用的 Makefile 构建 cpp,但我不确定如何处理编译后的 lib。
为了进行测试,我可以使用 rpath 或 LD_LIBRARY_PATH 将可执行文件指向正确的位置,但这在分发库时不起作用。
人们如何管理这个?
首先,确定您是否真的需要共享库。从你的问题中不清楚,但如果你自己编译包装器编译到共享库中,这可能是不必要的 - 你可以将代码编译到静态库中并将其直接链接到可执行文件中。
此外,您也可以尝试静态链接该第三方库。我认为这应该不难。是的,你需要使用build清单中的命令来完成所有这些操作。
但是,如果您仍然需要使用共享库并且不希望最终用户自己安装它(这很奇怪,因为这就是共享库的要点),您必须手动分发它。例如,您可以编写一个 makefile 来组装用户可以提取和使用的存档。为了让你的程序正确找到库,你要么让用户将此存档安装到系统根目录中(例如/usr在 Linux 上;然后这个共享库将自动定位),要么你必须在可执行文件周围编写小的 shell 脚本包装器这将找到共享库并设置适当的LD_LIBRARY_PATH.
我会走第一条路。通常所有主要平台都提供了创建安装包的方法(Linux 上为 deb/rpm/pkg.tar.xz/whatever,Mac 上为brew,Windows 上为 windows installer,尽管在 Windows 上您可以将共享库放在与可执行文件并且它将起作用)。您只需为用户使用的平台创建包,这样您的程序就会安装在正确的目录中,并且您的共享库将被自动解析。
| 归档时间: |
|
| 查看次数: |
6737 次 |
| 最近记录: |