有一个lib-sys for libvips on crates.io,但是它使用pkg config在系统中搜索库以动态链接,而不是静态链接。
我想向libvips提供.dll或.exe中软件的最终二进制文件,因为用户应该只安装一个包含所有内容的可执行文件,C和Rust代码。
看看Rust book的FFI linking section,我们可以很容易地链接lib.a文件,但是libvips是一个巨大的复杂的C库,它具有.dll和.exe格式的Windowsreleases。我不知道如何静态地将这些libvips的Windows二进制文件链接到Rust程序。
有可能,我可以从源代码手动构建并手动链接它,但是build process看起来非常复杂,它使用脚本和Docker。我必须用我自己的build.rs替换那些脚本,它也做了同样的事情,但这对我来说似乎很难,因为我是一个初学者。我知道我必须在build.rs中设置rustc-link-search
,但我不知道如何编译libvips的.a
文件。Rust book on this
我的目标是从铁锈中吸取教训。我使用的是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的electron apps和node.js包的工作原理。复杂库的静态链接不久前就死了,不值得尝试。
不管怎样,这都是一种潜在的违规行为。libvips是LGPL,因此必须动态链接(或包含足够的代码以允许重新链接),否则整个应用程序将成为开源程序。
关于c - 在Windows中将libvips静态链接到Rust程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51810566/