1、安装cygwin
安装cygwin ,安装过程中,需要安装需要的工具,具体如下,
选择一种连接方式,我选择使用代理方式
连接成功后,显示如下,选择一个后缀为.cn的速度快。
安装需要的工具,工具列表如下,如果编译过程中,缺少哪一个工具,在把缺少的安装一下。
Archive
unzip
zip
Devel
autoconf
automake
binutils //这个编译不过换成mingw64-i686-binutils
cvs
gcc-core
gcc-g++
mingw64-i686-gcc-g++
mingw64-i686-gcc-core
mingw64-i686-runtime
mingw64-i686-pkg-config
gdb //调试用
gettext
gettext-devel
git
libgcrypt-devel
libiconv
libtool
make
nasm
patchutils
subversion
Editor
vim
Libs
expat
libgcrypt
Web
curl (optional: for building extras/contrib)
wget (optional: for building extras/contrib)
Utils
ncurses
下载vlc 和库
vlc 源文件:vlc-2.2.1.tar.xz。
最好库和版本对应,要不会出现编译中的错误。
开始编译
解压源码
执行如下命令。
1 2 | $ tar xJvf vlc-2.2.1.tar.xz $ cd vlc-2.2.1/ |
准备库
执行如下命令。
1 2 | $ cd contrib/ $ mkdir win32; cd win32 |
因为VLC官网提供的库是与VLC某版本对应的,我们需要手动将下载的库更改为最新的库,防止其到官网下载最新的库。
1
| $ mv ~/vlc-contrib-i686-w64-mingw32-20150630.tar.bz2 vlc-contrib-i686-w64-mingw32-latest.tar.bz2
|
编译库。
1 2 | $ ../bootstrap --build=i686-w64-mingw32 $ make prebuilt |
做一些清理工作。
1
| $ rm ../i686-w64-mingw32/bin/{luac,moc,rcc,uic}
|
不知道为什么(没仔细研究脚本),在执行完make prebuilt
后,库路径下bin/rcc.exe
被删除了,故,手动复制将其恢复。
1 2 | $ cp /cygdrive/d/rcc.exe ../i686-w64-mingw32/bin $ cd ../../ # 回到vlc源码根目录 |
编译源码
编译时遇到了如下错误。
1
| moc.exe: error while loading shared libraries: libstdc++-6.dll: cannot open shared object file: No such file or directory
|
没有研究明白为什么libstdc++-6.dll
找不到,手动将其添加到环境变量中。
1
| $ export PATH=/usr/i686-w64-mingw32/sys-root/mingw/bin/:$PATH
|
再执行如下命令。
1 2 3 | $ ./bootstrap $ mkdir win32; cd win32 $ ../extras/package/win32/configure.sh --host=i686-w64-mingw32 |
configure
完成后,大概是如下样子。
1 2 3 4 5 6 7 8 9 10 | libvlc configuration -------------------- version : 2.2.1 system : mingw32 architecture : i686 mmx sse sse2 optimizations : yes vlc aliases : cvlc rvlc qvlc svlc To build vlc and its plugins, type `make', or `./compile' if you like nice colors. |
根据CPU内核个数,执行make
命令。
1
| make -j4 # 4核CPU
|
之后是漫长的等待,一般不会出错。
打包
执行如下命令。
1
| $ make package-win-common
|
执行完成后,当前目录下会生成vlc-2.2.1目录,即为绿色版VLC。
问题
运行VLC没有界面,原因是libqt4_plugin.dll
需要调用libstdc++-6.dll
和libgcc_s_sjlj-1.dll,libwinpthread-1.dll
库,没研究明白为何编译时并没有静态加载这3个库。
解决办法为将这两个库复制到打包目录即可。
1 2 3 4 5 6 7 | $ cp /usr/i686-w64-mingw32/sys-root/mingw/bin/{libstdc++-6.dll,libgcc_s_sjlj-1.dll,libwinpthread-1.dll} vlc-2.2.1/
|
运行测试。