crates.io 上有一个用于libvips的lib-sys,但是它使用pkg-config,它会在系统中搜索要动态链接的库,而不是静态的。
我想以 .dll 或 .exe 格式为 libvips 提供我的软件的最终二进制文件,因为用户应该只安装一个包含所有内容的可执行文件,C 和 Rust 代码。
查看 Rust 书的 FFI 链接部分,我们可以轻松链接 lib.a 文件,但 libvips 是一个庞大的复杂 C 库,具有 .dll 和 .exe 格式的 Windows 版本。我不知道如何将libvips的这些Windows二进制文件静态链接到Rust程序。
潜在地,我可以手动从源代码构建它并手动链接它,但构建过程似乎非常复杂,它使用脚本和 Docker。我将不得不用我自己的 build.rs 替换这些脚本,但对我来说这似乎很难,因为我是初学者。我知道我必须在 build.rs 中设置rustc-link-search
,但我不知道如何为 libvips 编译.a
文件。关于这个的锈书
我的目标是从 Rust 到 libvips 中 FFI。我正在使用 Windows 10,并希望cargo build
该项目并将 Rust 代码和 libvips 放在一个没有其他依赖项的可分发二进制文件中。
编辑-1:VIPS-dev-W64-web-x.y.z.zip包含libvips.lib
、libvips.dll.a
文件、pkgconfig.pc
文件,以及正常的.dll
和vips.exe
。我可以使用这些 .lib 和 .a 文件吗?如果是的话,具体怎么做?它会静态链接吗?这些.pc
文件对我的情况有用吗?
只需将树中的libvips bin区域发送到某个地方,在启动时将其添加到PATH,然后动态链接即可。这就是使用 libvips 的电子应用程序和 node.js 包的工作方式。复杂库的静态链接前段时间死了,不值得尝试。
libvips 是 LGPL,因此您必须动态链接(或包含足够的代码以允许重新链接(,否则您的整个应用程序将变为开源。