天天看点

[工程构建] windows环境下编译vlc源码

前言:

最近需要对 vlc 源代码进行编译,官方提供了三种方式:

1)使用MinGW在linux环境下进行交叉编译,在ubuntu环境下使用交叉编译工具链编译,生成能够在windows平台下运行的二进制文件,即MinGW+linux;

2)使用windows平台下的小型unix环境工具组——“MSYS”,再进入MSYS使用1)中的交叉编译,即MSYS+MinGW+Windows;

3)使用Cygwin ,在windows平台下,直接编译生成可在windows下运行的代码,Cygwin是windows环境下模拟posix环境的一个工具套件,因此这个方案存在很多兼容性问题,而且对代码实现也有一定要求,如果工程不是严格按照posix标准构建的,那么在此环境下编译势必会遇到符号表找不到的问题。

目前官方推荐的是方案 1

环境搭建:

上面说到了需要使用ubuntu环境作为编译环境,因此这里便需要搭建一个ubuntu环境,并在环境中准备相应的外围软件包。

虚拟机+外网:

这种条件,无需过多介绍,安装ubuntu虚拟机,并使用apt-get安装相应外围软件包即可,具体的依赖包和命令如下:

安装交叉编译工具:

  • gcc-mingw-w64-i686
  • g++-mingw-w64-i686
  • mingw-w64-tools

安装依赖包:

  • lua (5.2)
  • all autotools: libtool, automake, autoconf, autopoint, make, gettext, pkg-config
  • qt4-dev-tools, qt5-default (or qt4-default if qt plugin build fails)
  • git, subversion cmake, cvs if you want to rebuild contribs
  • wine-dev for creating Win32 packages
  • zip [for creating .zip package], p7zip [for .7z package], nsis [for .exe auto-installer], bzip2 [for 'make prebuild]
# apt-get install lua5.2 libtool automake autoconf autopoint make gettext pkg-config
# apt-get install qt4-dev-tools qt5-default git subversion cmake cvs 
# apt-get install wine64-development-tools libwine-dev zip p7zip nsis bzip2
# apt-get install yasm ragel ant default-jdk protobuf-compiler dos2unix      

虚拟机+无外网:

有些时候,虚拟机无法连接外网,这个时候我们就无法使用apt-get进行在线安装,步骤有如下几部:

1)选择合适的apt-get源,这里推荐2个源;

阿里云:​​http://mirrors.aliyun.com/ubuntu/​​

北京理工大学:​​https://mirror.bjtu.edu.cn/ubuntu/​​

2)在源网站内找到符合自己虚拟机架构且版本较新的 .deb 压缩包;下一小节介绍如何查找 .deb文件

  • ubuntu 和 debian 同属于 debian系列,他们使用 .deb作为外围软件包的后缀,他们使用 dpkg进行包管理,对应的在线仓库管理工具为apt-get;
  • centos 、suse、fedro 通属于 redhat系列,他们使用 .rpm作为外围软件包的后缀,他们使用 rpm进行包管理,对应的在线仓库管理工具为yum 和 dnf;

3)使用dpkg -i xxx.deb进行 xxx软件包的安装;

如果包之间存在相互依赖,那么可以把所有包都放在同一个目录下,然后 dpkg -i *.deb进行安装

如何在apt-get源上查找deb文件?

可以按照如下步骤执行:

1)登录ubuntu的官方包管理网站:​​https://packages.ubuntu.com/​​ , 查询需要下载的包

[工程构建] windows环境下编译vlc源码

2)在搜索结果中选择相应的版本,各个版本的区别后续介绍

[工程构建] windows环境下编译vlc源码

3)在弹出页面中 拖到底 ,选择符合自己需要的架构,这里我们用的是ubuntu 64位,故选择amd64,如果32位则选 i386,其他系统按实际情况选择

[工程构建] windows环境下编译vlc源码

4)点进去,你会看到这么一句话

[工程构建] windows环境下编译vlc源码

5)至此,我们便知道需要的包在  pool/universe/g/gcc-mingw-w64/ 这个路径下, 有些时候,那么拼接前面的apt-get源的地址便是:​​http://mirrors.aliyun.com/ubuntu/pool/universe/g/gcc-mingw-w64/​​,有些时候还会有 pool/main 路径下的,主要就是 universe 和 main

6)跳转到对应的路径下载,下载的时候,需要看准架构。

上传deb文件到编译机

首先我们需要把上一步中下载的deb包上传到ubuntu机器上,可使用的工具有 ​​scp​​​、ftp、http、vm tools等等,由于​​scp​​​ 和 ftp依赖​​ssh​​服务,因此可能用不起来,vm tools是 vmware 自带的,但是有时候用不起来,以上三种如果任意一种均可。

如果都不可用,那么推荐使用​​http方式​​。

此时主机上已经把所有依赖包下载完毕,我们先将所有deb文件打包成一个zip文件,再在虚拟机上通过浏览器访问主机http服务:http://196.168.0.112:80/vlc-compile-needs.zip 。

这里的196.168.0.112是主机ip

至此,准备工作已经完毕,下面使用dpkg进行deb包安装。

使用dpkg安装deb包

1)将所有包解压到同一个目录下,然后全部安装 dpkg -i *.deb

2)运行完毕后,会提示哪些包安装失败

3)以此单独安装这些包,并根据错误提示安装相应的依赖包,目前已知的依赖包如下: