使用Linux(Docket)交叉编译Windows64的VLC3.0.21
环境:
Ubuntu23.04
参考文档是源码里的流程:https://code.videolan.org/videolan/vlc/-/blob/3.0.x/extras/ci/gitlab-ci.yml?ref_type=heads
里面有自己搭建环境的方法,但是容易出错,反正我没成功过,若有那位大神成功了请来踢我。
安装Docker
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
一键安装,等待执行完成便可。
Docket的常用命令可参考我上传的资源Docker常用命令.xmind
下载镜像
docker pull registry.videolan.org/vlc-debian-win64-3.0:20211008140026
此处下载的镜像是给VLC3.0.21用的,若需要编译其他版本VLC,参考https://code.videolan.org/videolan/vlc/-/blob/master/extras/ci/gitlab-ci.yml
中相应版本的 VLC_WIN64_IMAGE 所指向的镜像,如:
下载过程中容易遇到卡死不动的情况,可以多次终止重下,或更换Docker镜像源,若实在不行,可使用我提供的离线安装包(只适用于3.0.21):
百度网盘
提取码:1024
下载后导入镜像
cat vlc-debian-win64-3.0_20211008140026.tar | docker import - vlc-debian-win64-3.0:20211008140026
启动容器
docker run --user root -v /opt/docker3012:/opt/docker3012 -it registry.videolan.org/vlc-debian-win64-3.0:20211008140026
# 在构建过程中因服务器不在国内,易出现连接不稳定导致的下载(构建)失败,建议使用代理
# 若拥有代理请使用:
docker run -e http_proxy=http://192.168.1.109:10809 -e https_proxy=http://192.168.1.109:10809 ……
–user用于指定登陆用户,默认并非root用户,在进行后续操作时易陷入无目录权限的问题。
-v用于指定本机与容器进行目录映射的位置关系,格式为<本机目录>:<容器目录>,这一步是为了防止容器意外退出导致下载的依赖消失。映射的<容器目录>是后续所有操作的根目录。
-e可以指定容器内使用的代理地址,防止因网络问题导致的构建VLC失败。推荐使用v2rayN,代理需付费购买,软件记得开启局域网连接。
下载VLC源码
cd <容器映射目录>
git config --global core.autocrlf false
git clone https://code.videolan.org/videolan/vlc.git
# 切换VLC版本
cd vlc
git checkout -b 3.0.21 origin/3.0.x
于写文档时(2024/01/23),3.0.x版本指的就是3.0.21版本,后续可能还会升级,请保证版本的统一。
之前出现过下载VLC源码的tar包进行编译出现找不到.git的问题,所以一直在用git克隆。若无法连接到github,可在源码根目录使用git init
命令新建.git目录。
构建VLC
mkdir build
cd build
../vlc/extras/package/win32/build.sh -a x86_64
这一步很费时间大约得20多分钟。期间会从网上下载很多依赖,包括Web插件。
编译VLC
cd win64
make package-win-common
最后一步,可以根据需求编译,每次修改源码后需要重新编译(不需要再次构建)
命令 | 描述 |
---|---|
make package-win-common | vlc-x.x.x创建一个以所有二进制文件命名的子目录。您可以直接拷贝此目录到Windows运行 VLC。 |
make package-win-strip | 与第一条相同,但将创建“剥离”二进制文件(即最小尺寸,无法与调试器一起使用)。 |
make package-win32-7zip | 与第一条相同,但会将目录打包在 7z 文件中。 |
make package-win32-zip | 与第一条相同,但会将目录打包为 zip 文件。 |
make package-win32 | 与第一条相同,但还会创建一个自动安装程序包。您必须将 NSIS 安装在其默认位置才能使其正常工作。 |