windows平臺下vlc編譯

轉自:http://jeremiah.blog.51cto.com/539865/114190
??? Jeremiah剛剛工作幾個月,參與的第一個項目是與視頻監控有關,分配給我的任務就是用開源的vlc做一個自己的播放器。
??? 對于開源項目來說,搭建起編譯環境是第一步也是最重要的一步。Jeremiah在歷經5天的痛苦折磨,google出了n多網頁,其中還包括一個德語的網頁和韓語的網頁,終于編譯通過了vlc0.8.6d。百度到的ChinaUnix的一個網頁上面說:編譯vlc感覺就像被...,Jeremiah深有體會啊。不過編譯成功,還是小興奮了一下。啊哈哈~!有些自虐傾向。
??? 在網上查到一個vlc的qq群:49846130。里面人快滿了,不知道什么時候開個二群。有興趣的可以加一下,大家共同交流。
??? 廢話不多說了,步入正題。
??? 在windows下編譯vlc需要使用仿真Linux環境Cygwin或者Msys+MingW,據說差不多。但是Jeremiah沒有用過后者,所以在這只介紹Cygwin環境。
??? 編譯之前的說明:由于最近Cygwin更新了庫文件,導致出現了一些新的無法通過編譯的錯誤。Jeremiah將自己的應用的Cygwin-old的庫文件在我的公共郵箱提供了下載,具體下載方式為:
1). 登錄http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我(jeremiah.vlc@gmail.com),我會告知。
4). 在“我的文件夾”的“Jeremiah_VLC相關資源”有所有資料的超大附件連接。
??? 編譯第一步:去下載Cygwin。給個網址:[url]http://www.cygwin.com/setup.exe[/url]用我上面提供的,選擇從本地安裝
??? 編譯第二步:安裝Cygwin。Cygwin需要安裝到某個盤的根路徑。然后要找個源下載相應的庫,[url]http://www.cygwin.cn/pub[/url]相對比較快,[url]ftp://ftp.sjtu.edu.cn/cygwin/[/url]作為參考。(如果用的本地的庫文件,就不用寫這一項)然后就需要安裝其他庫來支持vlc的編譯了。目錄如下:
Archive
????unzip (5.52-2)
????zip (2.32-2)
Devel
????autoconf (4-1 2.13-3 2.61-1)
????automake (2-1 1.10-1 1.4p6-4 1.5-2 1.63-3 1.7.9-3 1.8.5-3 1.9.6-2)
????binutils (20080624)
????cvs (1.11.22-1)
????gcc (3.4.4-3)
????gcc-core (3.4.4-3)
????gcc-g++ (3.4.4-3)
????gcc-mingw (20040810-1)
????gcc-mingw-core (20050522-1)
????gcc-mingw-g++ (20050522-1)
????gdb (6.8-2)
????gettext (0.15-1)
????gettext-devel (0.15-1)
????git (1.6.0.2-1)
????libiconv (1.11-1)
????libgcrypt-devel (1.41-4)
????libtool (1.5.27a-1)
????make (3.81-2)
????mingw-runtime (3.15.1-1)?
????nasm (2.02-1)
????patchutils (0.2.31-2)
????pkg-config (0.23a-2)
????subversion (1.5.2-1)
Editor
????vim (7.2-3)
Libs
????expat (2.0.1-1)
????libgcrypt (1.4.1-4)
Web
????curl (optional: for building extras/contrib) (7.16.3-1)
????wget (optional: for building extras/contrib) (1.11.3-1)
經過比較漫長的下載過程,Cygwin就算安裝好了。建議將下載下來的文件(位于安裝文件同目錄)保留下來,下次安裝的時候直接從文件安裝就不用到網上下載了。
??? 第一次運行Cygwin,如果沒有產生下列代碼:
Copying skeleton files.
These files are for the user to personalise
their cygwin experience.

These will never be overwritten.

`./.bashrc' -> `/home/wangwei1//.bashrc'
`./.bash_profile' -> `/home/wangwei1//.bash_profile'
`./.inputrc' -> `/home/wangwei1//.inputrc'
??? 則表示windows用戶沒有添加到Cygwin中,運行以下兩條命令添加用戶:
mkpasswd -l [-d] > /etc/passwd
mkgroup -l [-d] > /etc/group
??? 其中-d可選,如果你在域中,需要用加入'-d 域名'。
??? 重新開啟Cygwin,在根目錄'/'下就會生成/home/yourname的文件夾。
??? 編譯第三步:下載源碼及第三方庫。vlc的所有的源碼(*.tar.gz,*.tar.bz2)及編譯好的綠色版(win32/*.zip),安裝版(win32/*.exe)都可以在這里下載:[url]http://download.videolan.org/pub/videolan/vlc/[/url]Cygwin下編譯vlc最關鍵的就是源碼和第三方庫要相匹配,Jeremiah之所以編譯了5天,經歷了n多痛苦的過程,就是因為沒有匹配好源碼和第三方庫,導致了大量的錯誤。上面網址里面的vlc的版本很多,相對穩定的是vlc-0.8.6*版本,推薦0.8.6i,匹配的contrib為:[url]http://download.videolan.org/pub/testing/win32/contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2[/url]。Jeremiah寫這篇博客的時候最新的發行版是vlc-0.9.6,其實1.0.0已經在測試了,只是沒有正式發布而已([url]http://nightlies.videolan.org/[/url]),vlc各個版本的更新日志參考:[url]http://www.videolan.org/developers/vlc/NEWS[/url]。但是Jeremiah沒有編譯成功vlc-0.9.6,0.9.*版本推薦0.9.4,匹配的contib為:contrib-20080811-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2。
??? Jeremiah將在未來幾篇博客中詳細介紹編譯0.8.6i和0.9.4。
windows平臺下vlc編譯之二:vlc-0.8.6i的編譯
??? 如果按照上一篇博客《windows平臺下vlc編譯之一:編譯環境構建》安裝好了Cygwin,下載了源碼和第三方庫之后,我們就可以編譯vlc了。這篇博客先講如何編譯vlc-0.8.6i.
??? 步驟一:解壓源碼和第三方庫。
源文件:http://download.videolan.org/pub/videolan/vlc/0.8.6i/vlc-0.8.6i.tar.gz
庫:http://download.videolan.org/pub/testing/win32/contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2
??? 將vlc-0.8.6i.tar.gz和contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2拷貝到/home/username/下面(username為登陸的用戶目錄),運行以下命令解壓:
tar xjvf contrib-20070530-win32-bin-gcc-3.4.5-only.tar.bz2 -C /
tar xzvf vlc-0.8.6i.tar.gz
????做一點點清理工作
rm -rf /usr/win32/bin/moc
rm -rf /usr/win32/bin/rcc
rm -rf /usr/win32/bin/uic
??? 步驟二:Bootstrap
cd vlc-0.8.6i
./bootstrap
??? 可能出現的錯誤:
+ aclocal-1.9 -I m4
/usr/bin/m4:configure.ac:4643: cannot create temporary file for diversion: Permission denied
autom4te-2.61: /usr/bin/m4 failed with exit status: 1
aclocal-1.9: autom4te failed with exit status: 1
??? 分析:殺毒軟件有關系,比如Jeremiah用的Mcafee就會出這樣的錯誤。
??? 解決方法:關閉殺毒軟件重新運行./bootstrap。
????步驟三:編輯vlc腳本
??? 在vic-0.8.6i下新建文本文件"configure-vlc01.sh"(見附件),內容如下:
PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig /
? CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
? LDFLAGS=-L/usr/win32/lib /
? CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
? ./configure /
????? --disable-gtk /
????? --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
????? --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac /
????? --with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora /
????? --with-wx-config-path=/usr/win32/bin /
????? --with-freetype-config-path=/usr/win32/bin /
????? --with-fribidi-config-path=/usr/win32/bin /
????? --enable-live555 --with-live555-tree=/usr/win32/live.com /
????? --enable-caca --with-caca-config-path=/usr/win32/bin /
????? --with-xml2-config-path=/usr/win32/bin /
????? --with-dvdnav-config-path=/usr/win32/bin /
????? --disable-cddax --disable-vcdx --enable-goom /
????? --enable-twolame --enable-dvdread /
????? --enable-shared-libvlc /
????? --enable-debug
??? 想知道每個--enable,--disable是什么意思,可以使用如下命令將configure的參數信息保存到confHelp.txt中,以后對照該文件查看修改vlc編譯腳本。
./configure -h > confHelp.txt
??? 步驟四:運行vlc腳本
??? 轉換下腳本的編碼格式:
dos2unix configure-vlc01.sh
??? 運行腳本:
./configure-vlc01.sh
??? 如果腳本遇到了類似Permission denied的錯誤,提升腳本的權限:
chmod 777 configure-vlc01.sh
??? 如果腳本運行成功,則會顯示如下信息:
vlc configuration
--------------------
vlc version???????????????????? : 0.8.6i
system????????????????????????????????: mingw32
architecture????????????????????: i686 mmx
build flavour???????????????? : debug optim devel
vlc aliases???????????????????? : svlc wxvlc

You can tune the compiler flags in vlc-config.
To build vlc and its plugins, type `./compile' or `make'.
??? 步驟五:作一點點修改工作
??? 由于在編譯完成后vlc.exe會要求libvlc.dll.exe,這顯然是不對的。應該直接去調用libtool.dll,解決方案為:
修改"/tmp/vlc-0.8.6i"目錄下的libtool文件4760行

????????prog)
????????????case $host in
??*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
????????????esac

為:

????????prog)
????????????case $host in
??#*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
??*cygwin*) output=`$echo $output` ;;
????????????esac
????
??? 步驟六:make
??? 運行:
make
??? 如果是雙核的電腦,可以運行:
make -j2
??? 如果的電腦有N多個cpu,則參數可以為-jN,N為cpu個數。這樣能將幾個cpu都利用起來,執行時間會縮短一些。
??? make的執行期間可能會出現錯誤,需要修改一些文件,當修改完成后,再執行make,以前make的東西會保留而繼續make剛才出錯的地方。其實這種方式很方便我們以后修改源代碼,重新make的時候它只會編譯修改的地方,很節省時間。
??? 錯誤1:
In file included from file.c:30:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/sys/stat.
h:113: error: parse error before "off_t"
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/sys/stat.
h:118: error: parse error before '}' token
make[4]: *** [libaccess_output_file_plugin_a-file.o] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/access_output'
make[3]: *** [all-modules] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/access_output'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
??? 解決方案:
//在"/usr/i686-pc-mingw32/include/sys"目錄下的stat.h的文件開始處添加如下代碼

#ifndef _OFF_T DEFINED
typedeflong off_t;
#define _OFF_T DEFINED
#endif
??? 錯誤2:
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
Open':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:219: und
efined reference to `_dca_init'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
DoWork':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:303: und
efined reference to `_dca_syncinfo'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:312: und
efined reference to `_dca_frame'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:331: und
efined reference to `_dca_blocks_num'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:335: und
efined reference to `_dca_block'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:341: und
efined reference to `_dca_samples'
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:331: und
efined reference to `_dca_blocks_num'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
Destroy':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:376: und
efined reference to `_dca_free'
libdtstofloat32_plugin.a(libdtstofloat32_plugin_a-dtstofloat32.o): In function `
CloseFilter':
/home/wangwei1/vlc-0.8.6i/modules/audio_filter/converter/dtstofloat32.c:430: und
efined reference to `_dca_free'
collect2: ld returned 1 exit status
make[6]: *** [libdtstofloat32_plugin.dll] Error 1
make[6]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter/conve
rter'
make[5]: *** [all-modules] Error 1
make[5]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter/conve
rter'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/audio_filter'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
??? 解決方案:
修改"/tmp/vlc-0.8.6i"目錄下的vlc-config 文件

dtstofloat32)
????????ldflags="${ldflags} -ldts_pic"

為:

dtstofloat32)
????????ldflags="${ldflags} -ldts"
??? 錯誤3:
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x3fb): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x488): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x4e5): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x57f): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x5d5): undefined refer
ence to `_ntohl@4'
/usr/win32/lib/libFLAC.a(bitwriter.o):bitwriter.c:(.text+0x66f): more undefined
references to `_ntohl@4' follow
collect2: ld returned 1 exit status
make[4]: *** [libflacdec_plugin.dll] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/codec'
make[3]: *** [all-modules] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules/codec'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
??? 解決方案:
修改"/tmp/vlc-0.8.6i"目錄下的vlc-config 文件

flacdec)
????????ldflags="${ldflags} -lFLAC"

為:

flacdec)
????????ldflags="${ldflags} -lFLAC -lws2_32"
??? 錯誤4:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/wchar.h:4
27: error: `off_t' does not name a type
make[3]: *** [libaxvlc_a-main.o] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.8.6i/activex'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/wangwei1/vlc-0.8.6i/activex'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.8.6i'
make: *** [all] Error 2
??? 解決方案:
//在"/usr/i686-pc-mingw32/include/"目錄下的wchar.h的文件開始處添加如下代碼

#ifndef _OFF_T DEFINED
typedeflong off_t;
#define _OFF_T DEFINED
#endif
??? 一般會遇到這四個錯誤,如果還出現了其他錯誤,肯定是哪一步搞錯了,如果還是有錯誤,RPWT。
????步驟七:打包
??? 執行以下命令就會得到綠色版的vlc:
make package-win32-base
??? 在vlc-0.8.6i的目錄下又會出現一個目錄vlc-0.8.6i,里面就是編譯好的vlc了。
??? 如果執行:
make package-win32-zip
??? 得到的zip文件就是官網上提供的/win32/*.zip文件了。
??? 如果想得到安裝文件(后面講ActiveX的時候會用到),首先需要下載NSIS 2.41,給個連接:[url]http://prdownloads.sourceforge.net/nsis/nsis-2.41-setup.exe?download[/url]
??? 安裝NSIS 2.41,然后在打包好的vlc-0.8.6i下面右鍵vlc.win32.nsi,選擇Compile NSIS .。
??? 期間會出錯誤,有關Mozilla插件的:
Error in macro InstallFile . macroline 1
Error in . "E:/cygwin/home/wangwei1/vlc-0.8.6i0/vlc-0.8.6i/vlc.win32.nsi" . line 445 -- aborting creation process
??? 用文本編譯器打開vlc.win32.nsi,在第445行前加上;(分號)注釋起來。
;????!insertmacro InstallFile mozilla/npvlc.dll
??? 重新Compile NSIS .。運行成功之后,在編譯好的vlc-0.8.6i同級目錄里面就會出現vlc-${VERSION}-win32.exe這個文件。這個就是自己編譯的vlc的安裝文件了。(文件名應該是vlc-0.8.6i-win32.exe,但是可能NSIS的腳本的問題,${VERSION}替換不了,手動改一下就行了。)
2009-07-09更新:
vlc.win32.nsi的第7行加入
!define VERSION "0.8.6i"
可以解決${VERSION}的問題。
??? 至此,vlc-0.8.6i算是編譯完成了。
2010-04-09更新:
錯誤修正:
如果運行vlc出現了“Windows無法訪問指定設備...您可能沒有合適權限訪問”,或者“Permission denied”錯誤,請在打包好的vlc-0.8.6i目錄下執行以下命令。增加兩個文件的運行權限。
  1. chmod?755?vlc.exe?vlc.exe.manifest?
windows平臺下vlc編譯之三:vlc-0.9.4的編譯
??? 如果你已經成功編譯了vlc-0.8.6i,那么編譯vlc-0.9.4就跟玩似的。
??? 在這簡單的介紹下編譯過程。如果有什么不明白的,先好好看看前兩篇日志。
??? 1. 解壓源碼及庫文件。
注意:如果你編譯過vlc-0.8.6i,請先執行以下命令刪除以前的庫文件。
rm -rf /usr/win32
還是在Windows下直接用rar解壓源文件吧,用tar xzvf來解壓最后可能會出現exe的執行權限問題。
源文件:http://download.videolan.org/pub/videolan/vlc/0.9.4/vlc-0.9.4.tar.bz2,解壓到X:/cygwin/home/yourname下。
第三方庫:contrib-20080811-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2,解壓到X:/cygwin/下。
(
在我的公共郵箱提供了下載,具體下載方式為:
1). 登錄
http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我(
jeremiah.vlc@gmail.com),我會告知。
4). 在“我的文件夾”的“Jeremiah_VLC相關資源”有所有資料的超大附件連接。
)
?
??? 2. 解壓完庫文件做一點點清理工作
rm -rf /usr/win32/bin/moc
rm -rf /usr/win32/bin/rcc
rm -rf /usr/win32/bin/uic
??? 3. 解壓完源碼做一點點修改工作
??? 用文本編輯器或vi打開vlc-0.9.4/configure.ac,
修改
AM_GNU_GETTEXT_VERSION([0.17])

AM_GNU_GETTEXT_VERSION([0.15])
或運行
sed -i 's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g' configure.ac
??? 4. 執行bootstrap,注意殺毒軟件可能引起會Permission Denied。
./bootstrap
??? 5. 顯示Successfully bootstrapped后就可以編輯vlc腳本了。
??? 這里有個問題需要詳細的說明一下,vlc官方提供的第三方庫qt4有問題,相關的skins2不好用。如果禁用掉qt4和skins2,最后得到的vlc沒有界面,可以在命令行下面運行。保存以下腳本為configure-vlc01.sh(見附件)。(如果想解決qt4的問題,得到有界面的vlc,請直接看8
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
???????? --host=i686-pc-mingw32 /
???????? --disable-gtk /
???????? --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
???????? --enable-avcodec --enable-avformat --enable-swscale /
???????? --enable-faad --enable-flac --enable-theora /
???????? --with-wx-config-path=/usr/win32/bin /
???????? --with-freetype-config-path=/usr/win32/bin /
???????? --with-fribidi-config-path=/usr/win32/bin /
???????? --enable-live555 --with-live555-tree=/usr/win32/live.com /
--disable-qt4 --disable-skins2 /
???????? --enable-caca --with-caca-config-path=/usr/win32/bin /
???????? --with-xml2-config-path=/usr/win32/bin /
???????? --with-dvdnav-config-path=/usr/win32/bin /
???????? --disable-cddax --disable-vcdx --enable-goom /??
???????? --enable-twolame --enable-dvdread /
???????? --enable-debug????--enable-dca /
???????? --disable-mkv --disable-taglib
??? 運行以下命令運行腳本:
dos2unix configure-vlc01.sh
./configure-vlc01.sh
??? 6. make
make
[or make -j2]
??? Jeremiah在make的時候沒有遇到錯誤,如果你遇到錯誤,請把錯誤直接貼到google上搜索解決方法。
??? 7. 打包,根據自己的需求來吧。
make package-win32-base
make package-win32-zip
??? 關于如何制作vlc的安裝文件,看上一篇日志吧。(基本上報錯就是一些language的錯誤或者skins、npvlc.dll的錯誤,原則就是哪行出錯了,就用;(分號)把哪行注釋起來。)
??? 8. 解決下qt4的問題。
????先把以下腳本保存為configure-vlc02.vlc(見附件)。
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
???????? --host=i686-pc-mingw32 /
???????? --disable-gtk /
???????? --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
???????? --enable-avcodec --enable-avformat --enable-swscale /
???????? --enable-faad --enable-flac --enable-theora /
???????? --with-wx-config-path=/usr/win32/bin /
???????? --with-freetype-config-path=/usr/win32/bin /
???????? --with-fribidi-config-path=/usr/win32/bin /
???????? --enable-live555 --with-live555-tree=/usr/win32/live.com /
???????? --enable-caca --with-caca-config-path=/usr/win32/bin /
???????? --with-xml2-config-path=/usr/win32/bin /
???????? --with-dvdnav-config-path=/usr/win32/bin /
???????? --disable-cddax --disable-vcdx --enable-goom /
???????? --enable-twolame --enable-dvdread /
???????? --enable-debug????--enable-dca /
???????? --disable-mkv --disable-taglib
??? 類似于5.執行腳本,可能會出現以下問題:
/usr/win32/include/qt4/QtCore/qatomic_windows.h:394: error: previous declaration
`long int InterlockedIncrement(long int*)' here
make[6]: *** [libqt4_plugin_la-qt4.lo] Error 1
make[6]: Leaving directory `/cygdrive/c/vlc/modules/gui/qt4'
make[5]: *** [all] Error 2
make[5]: Leaving directory `/cygdrive/c/vlc/modules/gui/qt4'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/cygdrive/c/vlc/modules/gui'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/cygdrive/c/vlc/modules/gui'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/cygdrive/c/vlc/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/cygdrive/c/vlc'
make: *** [all] Error 2
??? 需要去下載兩個文件:
1. [url]http://linux.rz.ruhr-uni-bochum.de/download/cygwin/release-2/w32api/w32api-3.11-1.tar.bz2[/url]
2. [url]http://downloads.videolan.org/pub/videolan/vlc/0.8.5/contrib/qt4-4.4.1-win32-bin.tar.bz2[/url]
??? 運行解壓命令解壓這兩個包。
tar xjvf w32api-3.11-1.tar.bz2 -C /
tar xjvf qt4-4.4.1-win32-bin.tar.bz2
??? 繼續執行make,報錯如下:
/usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/bin/ld: cannot fi
nd -lqjpeg
collect2: ld returned 1 exit status
make[6]: *** [libqt4_plugin.la] Error 1
make[6]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui/qt4'
make[5]: *** [all] Error 2
make[5]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui/qt4'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules/gui'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-0.9.4/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.9.4'
make: *** [all] Error 2
??? 將剛才解壓得到的qt4目錄下面的lib/libqjpeg.a拷貝到/usr/win32/lib中。進入到qt4-4.4.1-win32-bin目錄中執行:
cp lib/libqjpeg.a /usr/win32/lib
??? 再進入到vlc-0.9.4中執行make,應該就沒有錯誤了。然后可以按照7.打包了。
windows平臺下vlc編譯之四:精簡vlc
??? vlc太大,組件太多,我們根據業務需求,能用的僅僅是幾個組件而已,其他不用的我們就該去掉。這里Jeremiah根據自己的情況精簡了vlc,vlc-0.9.4最后得到的安裝文件3518KB,cab文件3520KB;vlc-0.8.6i的安裝文件3087KB,cab文件3264KB。相對于原來幾十兆來說,小了N多。
??? 1. 業務需求。
??? Jeremiah所用的業務需求是:(1)播放本地avi文件。(2)播放ts封裝的rtp流。(3)播放rtsp流。
??? 2. vlc-0.9.4的精簡
??? 腳本configure-vlc03.sh(見附件)如下:
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /?
????--host=i686-pc-mingw32 /?
????--disable-gtk /
????--enable-avcodec /
????--enable-avformat /
????--enable-libmpeg2 /
????--enable-live555 --with-live555-tree=/usr/win32/live.com /
????--disable-nls /
????--disable-skins2 /
????--disable-qt4 /
????--disable-macosx-defaults /
????--disable-hal /
????--disable-dbus /
????--disable-dbus-control /
????--disable-telepathy /
????--disable-mmx /
????--disable-sse /
????--disable-altivec /
????--disable-coverage /
????--disable-release /
????--enable-sout /
????--disable-lua /
????--disable-httpd /
????--disable-libproxy /
????--disable-audioscrobbler /
????--disable-taglib /
????--disable-dvdnav /
????--disable-dshow /
????--disable-bda /
????--disable-smb /
????--disable-dvbpsi /
????--disable-v4l2 /
????--disable-libcdio /
????--disable-libcddb /
????--disable-vcdx /
????--disable-cdda /
????--disable-vcd /
????--disable-dvb /
????--disable-screen /
????--disable-ogg /
????--disable-mkv /
????--disable-mod /
????--disable-mpc /
????--disable-gme /
????--disable-mad /
????--disable-id3tag /
????--disable-swscale /
????--disable-imgresample /
????--disable-faad /
????--disable-real /
????--disable-realrtsp /
????--disable-libtar /
????--disable-a52 /
????--disable-dca /
????--disable-flac /
????--disable-vorbis /
????--disable-tremor /
????--disable-speex /
????--disable-tarkin /
????--disable-theora /
????--disable-dirac /
????--disable-schroedinger /
????--disable-png /
????--disable-zvbi /
????--disable-telx /
????--disable-cmml /
????--disable-kate /
????--disable-x11 /
????--disable-xvideo /
????--disable-glx /
????--disable-xinerama /
????--disable-opengl /
????--disable-sdl /
????--disable-sdl-image /
????--disable-freetype /
????--disable-fribidi /
????--disable-fontconfig /
????--disable-libxml2 /
????--disable-pulse /
????--disable-alsa /
????--disable-upnp /
????--disable-ncurses /
????--disable-visual /
????--disable-atmo /
????--disable-bonjour /
????--disable-libgcrypt /
????--disable-gnutls /
????--disable-remoteosd /
????--enable-shared=yes /
????--enable-x264 /
????--enable-vlc /
????--enable-activex /
??? 腳本請參考:
./configure -h
以及:[url]http://www.jbkempf.com/blog/post/2007/12/14/Configure-step-in-VLC-building[/url]
??? make通過只后,刪除locale文件夾,這個文件夾是用本地語言作界面的。刪除plugins中的200多dll,只保留:
libaccess_file_plugin.dll
libaout_directx_plugin.dll
libasf_plugin.dll
libaudio_format_plugin.dll
libavcodec_plugin.dll
libavformat_plugin.dll
libavi_plugin.dll
libconverter_fixed_plugin.dll
libconverter_float_plugin.dll
libhotkeys_plugin.dll?
liblive555_plugin.dll
libmpeg_audio_plugin.dll
libpacketizer_copy_plugin.dll
libpacketizer_h264_plugin.dll
libpacketizer_vc1_plugin.dll
libplaylist_plugin.dll
librc_plugin.dll
librtp_plugin.dll
libsubtitle_plugin.dll
libtrivial_channel_mixer_plugin.dll
libtrivial_mixer_plugin.dll
libts_plugin.dll
libugly_resampler_plugin.dll
libvout_directx_plugin.dll
libwaveout_plugin.dll
??? 再用.nsi腳本編譯,修改n個錯誤之后就生成了較小的安裝文件了。
??? 3. 精簡vlc-0.8.6i
腳本configure-vlc02.sh(見附件)如下:
PKG_CONFIG_PATH=/usr/win32/lib/pkgconfig /
????CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
????LDFLAGS=-L/usr/win32/lib /
????CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
????./configure /
???????? --with-freetype-config-path=/usr/win32/bin /
???????? --with-fribidi-config-path=/usr/win32/bin /
???????? --enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac /
???????? --with-ffmpeg-zlib /
???????? --enable-live555 --with-live555-tree=/usr/win32/live.com /
??????? ?--disable-nls /
???????? --disable-cddax /
???????? --disable-vcdx /
???????? --disable-skins2 /
???????? --disable-wxwidgets /
???????? --disable-mozilla /
???????? --disable-httpd /
???????? --disable-dvdnav /
???????? --disable-libcdio /
???????? --disable-libcddb????/
???????? --disable-cdda????/
???????? --disable-sdl /
???????? --disable-sdl-image /
???????? --disable-vcd????/
???????? --disable-dvdread /
???????? --disable-smb /
???????? --disable-cmml /
???????? --disable-alsa /
???????? --disable-opengl /
???????? --disable-png /
???????? --disable-screen????/
???????? --disable-mkv????/
???????? --disable-mod????/
???????? --disable-mpc????/
???????? --disable-libtar????/
???????? --disable-speex????/
???????? --disable-visual????/
???????? --disable-daap????/
???????? --disable-bonjour????/
???????? --disable-gnutls????/
???????? --disable-vorbis /
???????? --disable-dts /
???????? --disable-real????/
???????? --disable-xml????/
???????? --disable-x264 /
???????? --enable-sout /
???????? --enable-activex /
???????? --enable-shared-libvlc /
???????? --enable-release
??? make之后刪除http,locale,skins,osdmenu文件夾,plugins保留:
libaccess_file_plugin.dll
libaccess_udp_plugin.dll
libaout_directx_plugin.dll
libasf_plugin.dll
libaudio_format_plugin.dll
libavi_plugin.dll
libffmpeg_plugin.dll
libfloat32tos16_plugin.dll
libfloat32_mixer_plugin.dll
libipv4_plugin.dll
libmpeg_audio_plugin.dll
libmpgatofixed32_plugin.dll
librc_plugin.dll
libs16tofixed32_plugin.dll
libs16tofloat32swab_plugin.dll
libs16tofloat32_plugin.dll
libs8tofloat32_plugin.dll
libsubtitle_plugin.dll
libtrivial_channel_mixer_plugin.dll
libtrivial_mixer_plugin.dll
libts_plugin.dll
libu8tofixed32_plugin.dll
libu8tofloat32_plugin.dll
libugly_resampler_plugin.dll
libvobsub_plugin.dll
libvout_directx_plugin.dll
libwaveout_plugin.dll
??? 使用.nsi腳本來做安裝文件就ok了。
windows平臺下vlc編譯之五:vlc-0.9.6的編譯
??? 前兩天Jeremiah偶爾用最新的Cygwin編譯了下vlc-0.9.6,好像修改一個錯誤就編譯通過了,很簡單,在這大體寫一下。
???
??? 1. 安裝最新的Cygwin,圖片見附件(pic.rar)。(如何卸載Cygwin或者使用雙Cygwin,請看下一篇日志:《Cygwin的卸載與新舊雙版本運行》)
Cygwin下載:[url]http://www.cygwin.com/setup.exe[/url]選擇通過網絡安裝。
強烈建議通過Jeremiah提供的本地文件安裝:
Cygwin-new(20081208)在我的公共郵箱提供了下載,具體下載方式為:
1). 登錄http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我(jeremiah.vlc@gmail.com),我會告知。
4). 在“我的文件夾”的“Jeremiah_VLC相關資源”有所有資料的超大附件連接。
Archive????
????????unzip?
????????zip
Devel????
????????autoconf?
????????automake??
????????binutils?
????????cvs?
????????gcc?
????????gcc-core?
????????gcc-g++?
????????gcc-mingw?
????????gcc-mingw-core?
????????gcc-mingw-g++?
????????gdb?
????????gettext?
????????gettext-devel
????????git?
????????libiconv
????????libgcrypt-devel
????????libtool?
????????make?
????????mingw-runtime
????????nasm
????????patchutils
????????pkg-config?
????????subversion
Editor????
????????vim
Libs????
????????expat
????????libgcrypt
Web????
????????curl
????????wget
???
??? 2. 下載源碼和庫:
源碼:[url]http://download.videolan.org/pub/videolan/vlc/0.9.6/vlc-0.9.6.tar.bz2[/url]
庫:http://www.namipan.com/downfile/contrib-20081021-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2/7691f26e0285d472e5642666e3c6cbf94d2bd21d7032ea01
??? 3. 解壓源文件到e:/cygwin/home/yourname/。解壓庫到e:/cygwin/。
刪除E:/cygwin/usr/win32/bin/的moc,rcc,uic。
修改vlc-0.9.6/configure.ac,
修改
AM_GNU_GETTEXT_VERSION([0.17])

AM_GNU_GETTEXT_VERSION([0.15])
或運行
sed -i 's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g' configure.ac
??? 4. 保存腳本configure-vlc01.sh(見附件)。
PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
???????? --host=i686-pc-mingw32 /
???????? --enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
???????? --enable-avcodec --enable-avformat --enable-swscale /
???????? --enable-faad --enable-flac --enable-theora /
???????? --enable-live555 --with-live555-tree=/usr/win32/live.com /
???????? --enable-caca --with-caca-config-path=/usr/win32/bin /
???????? --with-xml2-config-path=/usr/win32/bin /
???????? --with-dvdnav-config-path=/usr/win32/bin /
???????? --disable-cddax --disable-vcdx --enable-goom /
???????? --enable-twolame --enable-dvdread /
???????? --enable-debug??? --enable-dca /
???????? --disable-mkv --disable-taglib
????5. 運行./bootstrap && dos2unix ./configure-vlc01.sh && ./configure-vlc01.sh && make。
??? 6. 出錯:
_la-vlm.o input/.libs/libvlccore_la-vlmshell.o misc/.libs/libvlccore_la-revision
.o???? |????| /usr/bin/sed -e '/^[BCDGRS][ ]/s/.*[ ]/([^ ]*/)//1 DATA/;/^.*[ ]__nm__
/s/^.*[ ]__nm__/([^ ]*/)[ ][^ ]*//1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //' | sort |
uniq > .libs/libvlccore.exp'
make[4]: *** [libvlccore.la] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/wangwei1/vlc-0.9.6/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-0.9.6'
make: *** [all] Error 2
打開libtool第144行:
修改
global_symbol_pipe=""

global_symbol_pipe="sed -n -e 's/^.*[???? ]//([ABCDGIRSTW][ABCDGIRSTW]*//)[???????????? ][????????????]*//(//)//([_A-Za-z][_A-Za-z0-9]*//)/$///1//2//3 //3/p'"
繼續make && make package-win32-base。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453792.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python xgboost安裝_win7 64 python2 xgboost安裝

綜述:安裝Python3 環境下的xgboost 可以通過pip install , 在網址中下載對應版本: http://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 來進行安裝。但Python2在該網址下并沒有相應的包,所以要下載xgboost源代碼 然后編譯。很麻…

深度學習之卷積神經網絡 AlexNet

AlexNet 是 2012年ILSVRC 比賽冠軍,遠超第二名的CNN,比LeNet更深,用多層小卷積疊加來替換單個的大卷積,結構如下圖所示。 ?? 結構 預處理 原始圖片:256?256?3256*256*3256?256?3 圖像處理: 1.隨機…

jstl處理欄目與子欄目_芬頓氧化法廢水處理工程技術規范(征求意見稿)

日前,生態環境部印發《芬頓氧化法廢水處理工程技術規范(征求意見稿)》,詳情如下:各有關單位:為貫徹《中華人民共和國環境保護法》和《中華人民共和國水污染防治法》等法律法規,防治環境污染,改善環境質量&a…

深度學習之卷積神經網絡 ZF Net

ZFNet出自論文《 Visualizing and Understanding Convolutional Networks》,作者Matthew D. Zeiler和Rob Fergus——顯然ZFNet是以兩位作者名字的首字母命名的。ZFNet通常被認為是ILSVRC 2013的冠軍方法,但實際上ZFNet排在第3名,前兩名分別是…

SIP與RTP綜合應用5-RTP解包過程

RTP接收部分比較簡單(不用考慮jitterbuffer等),先從這里入手。 其實主要就3步: 1 創建一個udp,監聽一個端口,比如5200。 2 收到RTP包,送到解包程序,繼續收第 二個。 3 收齊一幀后,或保存文件&am…

JavaScript eval() 函數,計算某個字符串,并執行其中的的 JavaScript 代碼。

JavaScript eval() 函數,計算某個字符串,并執行其中的的 JavaScript 代碼。 適合用于計算器的計算,等。 例子: eval("x10;y20;document.write(x*y)") document.write(eval("22")) var x10 document.write(eva…

vb整合多個excel表格到一張_[Excel]同一工作簿中多個工作表保存成獨立的表格

一個工作簿中有多個表格,如何將其表格單獨保存成一個獨立的文檔呢?如果表格少,操作如下:選中要導出表格的標簽名--鼠標郵件--移動或復制表格--新建工作簿。當如果表格太多呢,以上方法就太羅嗦了。簡單方法用VBA,步驟如…

sqlserver字符串多行合并為一行

1 --創建測試表2 CREATE TABLE [dbo].[TestRows2Columns](3 [Id] [int] IDENTITY(1,1) NOT NULL,4 [UserName] [nvarchar](50) NULL,5 [Subject] [nvarchar](50) NULL,6 [Source] [numeric](18,0) NULL7 )8 GO9 10 --插入測試數據 11 INSERT INTO [TestRows2C…

OpenCore 的代碼結構

OpenCore的代碼結構 以開源Android 的代碼為例,Open Core 的代碼在Android 代碼的External/Opencore 目錄 中。這個目錄是OpenCore 的根目錄,其中包含的子目錄如下所示: android:這里面是一個上層的庫,它基于PVPlaye…

深度學習之卷積神經網絡 GoogleNet

GoogLeNet Incepetion V1 這是GoogLeNet的最早版本,出現在2014年的《Going deeper with convolutions》。之所以名為“GoogLeNet”而非“GoogleNet”,文章說是為了向早期的LeNet致敬。 深度學習以及神經網絡快速發展,人們不再只關注更給力的硬件、更大…

名詞解釋 算法的有限性_數據結構與算法期中考試卷(含答案)

玉林師范學院期中課程考試試卷(2010——2011學年度第一學期)命題教師:劉恒 命題教師所在系:數計系 課程名稱:數據結構與算法 考試專業:信計 考試年級:09級一、單項選擇題(每題2分,共30分,把正確…

Jzoj4348 打擊目標

又是被水題坑了。。。 一直想不出來看題解說要什么主席樹,于是開始打離線算法 結果打到一半發現要強制在線。。No!!! 發現直接AC自動機似乎可做?樹剖之后在AC自動機上跑的時候判斷一下不就好了嗎!連線段樹都不要 讓后快樂切掉,速度還可以&…

深度學習之卷積神經網絡 VGGNet

2014年,牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起研發出了新的深度卷積神經網絡:VGGNet,并取得了ILSVRC2014比賽分類項目的第二名(第一名是GoogLeNet,也是…

SpringMVC 返回json的兩種方式

前后臺數據交互使用json是一種很重要的方式.本文主要探討SpringMVC框架使用json傳輸的技術. 請注意,本文所提到的項目使用Spring 版本是4.1.7,其他版本在具體使用上可能有不一樣的情況. 一、最常見——使用RequestBody的注解返回一個實體對象; 使用方式如下: 1:引入jar包&#…

word上怎么把圖片拼接到一起_如何用Word把自己插入的兩張圖片合在一起?

例如上面效果的設置方法:1、單擊插入----圖片按鈕;2、彈出插入圖片對話框,按住Ctrl鍵,同時選擇所需要的圖片;3、選中圖片,單擊圖片工具格式----文字環繞----緊密型環繞;4、此時,用鼠…

深度學習之卷積神經網絡 ResNet

論文 Identity Mappings in Deep Residual Networks 2015年,ResNet(Residual Neural Network)由微軟研究院的Kaiming He等四名華人提出,并在ILSVRC2015比賽中取得冠軍,在top5上的錯誤率為3.57%,同時參數量…

按照RFC3984協議實現H264視頻流媒體 RTSP H264

轉自:http://topic.csdn.net/u/20100104/16/0fd992e8-b0a6-4c2b-85a4-d9513d3b1491.html 相信有不少人和我一樣,希望實現H264格式視頻的流媒體播放。但是對于一個新手來說,往往不知道從何入手。利用百度,GOOGLE等搜索資料真是沙里…

搭建SSM框架之Spring

作為一枚大四準備畢業的學生,最重要的事便是畢業設計,前些日子剛剛拿到畢設題目:“3D網絡圖:面向網絡結構數據的可視化軟件設計”,(⊙o⊙)…,怎么說哪,看到題目就是一頭霧水(前幾屆不…

audio unity 加速_淺談Unity中Android、iOS音頻延遲

在Unity上面做音游,當在移動端實機運行起來,會發現,音頻的發出會有一定的延遲,無論是長音效還是短音效,Unity內置的Audio內部使用的是FMOD,有以下手段改善通過設置稍微改善其延遲的問題Edit → Project Set…

深度學習之 hard negative mining (難例挖掘)

Hard Negative Mining Method 思想 hard是困難樣本,negative是負樣本,hard negative就是說在對負樣本分類時候,loss比較大(label與prediction相差較大)的那些樣本,也可以說是容易將負樣本看成正樣本的那些…