Replies: 2 comments 9 replies
|
实验性!文档后期修改!zlib晚点问问mivik!总之我那边托管的静态库不会下掉(兼容工作流),现在prpr-avc里面也留了拉取静态库的脚本,文档不会多难写的! |
0 replies
|
Actually |
9 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
(仅简单提及下此事,有点语无伦次了...)
(这个问题涉及到 phira、prpr-avc-ffmpeg 的实作决策,以及构建者是否应该转过去用 prpr-avc-ffmpeg)
(主要是 cross-build Windows target 会发生的事)
起因
prpr-avc-ffmpeg 上沒有提供
zlib.a,如果把prpr-avc/build.rs的z連結拔掉,Phira 仍然能編譯能跑,就是不知道 libz 在 prpr-avc 的作用是什麼背景
Since d2c1631 (and released since v0.4.0)
zlib is required to link statically or dynamically. (line 8)
phira/prpr-avc/build.rs
Lines 3 to 10 in 2ff63b3
一个合理的猜测是 v0.4.0 时期链接的 FFmpeg 启用了 zlib
不过实际上无论是下面的 phira-docs 源还是 prpr-avc-ffmpeg 源,
nm -A下来都不包含*flate*的符号但仅有 MSVC 有点小意外 ("this file requires zlib support")(更新) GNU 發現了同樣的提示字串
phira-docs
static-lib.zipin phira-docs 提供: (old blob in repo) (md with mirror maintained by NuanRMxi)prpr-avc/static-lib/x86_64-pc-windows-gnu/libz.a(initially by Mivik in What about detailed compilation guide? #271 (comment))prpr-avc/static-lib/x86_64-pc-windows-msvc/z.lib(by 9RayAlkalin)许多 Linux 系统可能已经包含了
libz.so运行时共享库,因此无需特别提供Windows 系统默认情况下不包含 zlib,需要它们来额外做静态链接,除非 PATH 环境变量中包含 MSYS2 和 Strawberry (Perl) 之类的程序
prpr-avc-ffmpeg
prpr-avc-ffmpeg 仅提供 ffmpeg 构建,并且未找到
libz.a。如果您使用 WSL 或 cross-build
x86_64-pc-windows-gnu,则会引发note: /usr/bin/x86_64-w64-mingw32-ld: cannot find -lz: No such file or directory。接着,如果你注释掉/删除
println!("cargo:rustc-link-lib=z");,它就能成功构建并启动游戏了!?(但可靠吗?)But who uses zlib?
Details
According to "zlib-rs" in
Cargo.lock, we can findflate2.But since
flate2-1.0.12, they use pure-rustminiz_oxidecrate by default,and the commit uses
flate2-1.0.26supplied for other crates, andlibz-sysis only required when enabling at leastzlibfeature (use platform-provided zlib).So...try to build Phira on d2c1631 ? Let's add these patches to let build work, without add real features, refer to [Compare d2c1631 & v0.4.0] and [Compare v0.6.1 & v0.6.2]
Patch
It works! It didn't actively find
libz.soor not required or it built for itself (?)Hmm...maybe someone use it in runtime or hide in phira code..?
or FFmpeg use it?
决策问题
现在麻烦的是,缺少了 zlib 会不会影响核心功能之类的
即,是否应该在 prpr-avc-ffmpeg 预构建一个 zlib
另外 phira-docs 如果要迁移到使用 prpr-avc-ffmpeg 后
在 prpr-avc-ffmpeg 提供
libz.a之前,是变成注释那行,还是单独补上好的 libz.a,还是仍然使用现有 static-lib.zip 镜像?(在确实有风险考量时,从 prpr-avc 移除 linking 然后叫能补上的补上好像也不太对)
以及是否有必要在静态库加上 zlib 编译指南,至少对于现在的 Phira 来说找不到 zlib 是个硬错误
~~也算是给用户自己编译的FFmpeg上的保险?~~但这是运行时的错误信息而已,也不会panic什么的,它们自己知道自己加也行(?)
All reactions