前言:
最近需要对 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进行在线安装,步骤有如下几部:
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/ , 查询需要下载的包
2)在搜索结果中选择相应的版本,各个版本的区别后续介绍
3)在弹出页面中 拖到底 ,选择符合自己需要的架构,这里我们用的是ubuntu 64位,故选择amd64,如果32位则选 i386,其他系统按实际情况选择
4)点进去,你会看到这么一句话
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)以此单独安装这些包,并根据错误提示安装相应的依赖包,目前已知的依赖包如下: