天天看點

[工程建構] 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)以此單獨安裝這些包,并根據錯誤提示安裝相應的依賴包,目前已知的依賴包如下: