本文完全參照了天將降的博客文章,寫于此以作來日備忘之用,原文地址:http://bk6.blog.163.com/blog/static/24498560201051193449196/
第一步:下載安裝Cygwin。筆者建議大家不要安裝不完整的版本,以免出現不必要的錯誤。之前就是用了網上下的一個300多兆的簡化版本,結果編譯會出現缺少編譯器等錯誤。Cygwin沒有必要下載最新的,只要是完整版本就好。最后提醒大家在線安裝Cygwin的過程相當漫長,而且會有下到一大半時報錯無法下載的問題,強烈建議選擇Use IE5 Settings的方式下載
安裝Cygwin時如下選項是必選項:
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)
這里還是建議硬盤空間大的話,完全安裝!!
第二步:編譯前的準備工作
源碼下載:vlc-1.0.5.tar.bz2
http://download.videolan.org/pub/videolan/vlc/1.0.5/vlc-1.0.5.tar.bz2
交叉編譯器:mingw32ce-0.59.1.tar.bz2
http://cdnetworks-kr-2.dl.sourceforge.net/project/cegcc/cegcc/0.59.1/cegcc_mingw32ce_cygwin1.7_r1375.tar.bz2
第三方庫:contrib-20091114-wince-bin-gcc-4.1.0-runtime-3.15.2-only.tar.bz2
http://download.videolan.org/pub/testing/contrib/contrib-20091114-wince-bin-gcc-4.1.0-runtime-3.15.2-only.tar.bz2
注:比較麻煩的是第三方庫,這個版本比較老,提供的第三方庫也不完整,需要自己做一些修改。(可以根據執行configure腳本時的提示做對應到改動)
第三步:將mingw32ce-0.59.1.tar.bz2解壓至/opt目錄下;
將contrib-20091114-wince-bin-gcc-4.1.0-runtime-3.15.2-only.tar.bz2(這里我是用自己修改后的第三方庫)解壓至/usr目錄下;
將源碼vlc-1.0.5.tar.bz2解壓至/home/"yourname"目錄下;
完成該步驟后,你會看到:/opt/mingw32ce /usr/wince /home/"yourname"/vlc-1.0.5這三個目錄
第四步:根據/vlc-1.0.5目錄下configure文件編寫腳本文件con-105.sh
腳本文件如下:
PATH=/opt/mingw32ce/bin:$PATH /
CPPFLAGS="-I/usr/wince/include -D_WIN32_WCE=0x0500" /
LDFLAGS="-L/usr/wince/lib" /
PKG_CONFIG_LIBDIR=/usr/wince/lib/pkgconfig /
./configure --host=arm-mingw32ce /
--enable-dshow --enable-bda --disable-hal --disable-activex --disable-vlc /
--disable-directx --disable-dvdnav --disable-libgcrypt --enable-wingdi /
--disable-remoteosd --disable-sdl --disable-skins2 /
--disable-faad --enable-mad --enable-wingdi --enable-waveout /
--enable-mkv --enable-httpd --enable-libmpeg2 --enable-ogg /
--enable-live555 --enable-realrtsp --enable-bda /
--enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac /
--with-ffmpeg-zlib --enable-faad --enable-flac --enable-theora /
--enable-csri --enable-libass --enable-asademux --enable-freetype=/usr/wince/freetype-2.3.12 /
--enable-release --enable-disable --enable-optimizations --enable-sse --enable-mmx --enable-optimize-memory
注:此腳本文件一定要注意每行末尾不要有多余的空格,否則會出錯。
第五步:執行腳本文件 ./con-105.sh
執行前,如果你是用文本編輯器編寫的腳本,需要先運行命令:dos2unix con-105.sh
這里最好用root用戶來執行,否則會出現權限錯誤提示(當然你也可以用chmod 777 con-105.sh來修改此文件的權限);
第六步:編譯代碼?? 執行命令:make
執行的過程中遇到如下錯誤,都找到了相應的解決方法.....
問題一:剛執行幾行就出現錯誤
解決:可能是指定的路徑沒有生效,重新設置PATH,命令:PATH=/opt/mingw32ce/bin:$PATH
問題二:.libs/libaccess_realrtsp_plugin_la-access.o:access.c:(.text+0x6b8): undefined reference to `closesocket'
.libs/libaccess_realrtsp_plugin_la-access.o:access.c:(.text+0x6b8): relocation truncated to fit: ARM_26 against undefined symbol `closesocket'
collect2: ld returned 1 exit status
make[6]: *** [libaccess_realrtsp_plugin.la] 錯誤 1
解決:修改vlc_network.h中`closesocket'的定義;
問題三:如果中途遇到關鍵字atoll的錯誤,打開config.h搜索關鍵字atoll
注掉以下代碼:#define HAVE_ATOLL 1
如果中途遇到關鍵字iconv的錯誤,打開config.h搜索關鍵字iconv
注掉以下代碼:#define HAVE_ICONV 1
第七步:打包
執行:make package-wince
就能直接將生成的文件打包成vlc-1.0.5.zip
或者執行:make package-wince-base
得到一個vlc-1.0.5的目錄
遇到問題:# make package-wince
OK.
cp "./bin/.libs/vlc.exe" "./vlc-1.0.5/"
cp: 無法 stat “./bin/.libs/vlc.exe”: 沒有該文件或目錄
make: *** [package-win-common] 錯誤 1
解決辦法:在/home/micro/vlc-1.0.5目錄下新建.libs文件夾,并將vlc.exe拷進該文件夾,然后重新執行make package-wince命令即可。
至此我們就得到了VLC 1.0.5對應的wince版本的DLLS。(注:由于后續版本中VLC已經不再為wince提供界面支持,所以我們編譯的最后只能生成可供調用的DLLS,并無可以直接運行的界面)