前言:
最近需要對 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/ , 查詢需要下載下傳的包
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)以此單獨安裝這些包,并根據錯誤提示安裝相應的依賴包,目前已知的依賴包如下: