在Windows中将libvips静态链接到Rust程序

时间:2018-08-12 16:09:51

标签: c windows rust static-linking ffi

有一个lib-sys for libvips on crates.io,但是它使用pkg-config在系统中搜索要动态链接而不是静态链接的库。

我想向libvips提供.dll或.exe中我软件的最终二进制文件,因为用户只能安装一个包含所有内容的可执行文件,C和Rust代码。

看一下Rust的书FFI linking section,我们可以轻松地链接lib.a文件,但是libvips是一个庞大的复杂C库,其中有releases用于Windows的.dll和.exe格式。我不知道如何将这些libvips的Windows二进制文件静态链接到Rust程序。

可能地,我可以手动从源代码构建它并手动链接它,但是build process似乎非常复杂,它使用脚本和Docker。我必须用自己的build.rs替换那些脚本,这些脚本执行相同的操作,但是对我来说这很难,因为我是一个初学者。我知道我必须在build.rs中设置rustc-link-search,但是我不知道如何为libvips编译.a文件。 Rust book on this

我的目标是将FFI从Rust转换为libvips。我正在使用Windows 10,并且想要cargo build项目,并且将Rust代码和libvips包含在一个没有其他依赖项的可分发二进制文件中。

编辑-1: vips-dev-w64-web-x.y.z.zip包含libvips.liblibvips.dll.a文件,pkgconfig .pc文件以及普通的.dllvips.exe。我可以使用这些.lib和.a文件吗?它会静态链接吗?这些.pc文件对我的情况有用吗?

1 个答案:

答案 0 :(得分:0)

只需将树中的libvips bin区域运送到某个地方,在启动时将其添加到PATH中,然后动态链接即可。这就是使用libvips的电子应用程序和node.js软件包的工作方式。复杂库的静态链接在不久前就失效了,不值得尝试。

尽可能多地违反许可规定。 libvips是LGPL,因此您必须动态链接(或包含足够的代码以允许重新链接),否则整个应用程序将变为开源。