有一个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.lib
,libvips.dll.a
文件,pkgconfig .pc
文件以及普通的.dll
和vips.exe
。我可以使用这些.lib和.a文件吗?它会静态链接吗?这些.pc
文件对我的情况有用吗?
答案 0 :(得分:0)
只需将树中的libvips bin区域运送到某个地方,在启动时将其添加到PATH中,然后动态链接即可。这就是使用libvips的电子应用程序和node.js软件包的工作方式。复杂库的静态链接在不久前就失效了,不值得尝试。
尽可能多地违反许可规定。 libvips是LGPL,因此您必须动态链接(或包含足够的代码以允许重新链接),否则整个应用程序将变为开源。