gpt4 book ai didi

shared-libraries - 制作和使用 Rust 共享库的正确方法?

转载 作者:行者123 更新时间:2023-11-29 08:06:54 27 4
gpt4 key购买 nike

我正在处理 cpp 库的绑定(bind)。为此,我为该库编写了一个 capi/包装器,并将其编译为一个共享库(.so 文件)。

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

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

人们如何管理它?

最佳答案

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

此外,您也可以尝试静态链接该第三方库。我不认为这应该很难。是的,您现在需要使用 list 中的 build 命令来执行所有这些操作。

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

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

关于shared-libraries - 制作和使用 Rust 共享库的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25468098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com