編譯移植Mplayer到mini2440開發板的過程及問題解決辦法
轉載地址:http://blog.sina.com.cn/s/blog_640531380100utiz.html
在網上搜了一下,實現linux下通用播發器Mplayer到mini2440開發板的編譯移植過程不算複雜。不過。由於各種原因,在編譯過程中總 會遇到許多問題,而多數問題從網上又都可以找得到答案。在此,結合本人親自移植經歷,將整個編譯移植過程和這個過程中遇到的問題及解決辦法整理一下,和大 家一起分享。
##################################################################################################
準備工作:
1、下載Mplayer的版本為:MPlayer-1.0rc2.tar.bz2 並將其解壓到linux主機的/opt資料夾下(任意資料夾都可以);
2、下載libmad的版本為: libmad-0.15.1b.tar.gz 並將其也解壓到/opt資料夾下;
3、交叉編譯器版本為:arm-linux-gcc-4.4.3
################################################################################################
libmad交叉編譯過程及問題解決辦法:
1、#cd /opt/libmad-0.15b
2 ./configure --prefix=/tmp/mplayer --enable-fpm=arm --host=arm-linux --disable-debugging --enable-shared --enable-static
CC=arm-linux-gcc (CC為交叉編譯工具,如果沒新增到環境變數,就要指定完整路徑)
3、 make
4、 make install
這時如果出現錯誤:cc1: error: unrecognized command line option “-fforce-mem”
(其實這個錯誤是編譯安裝libmad時候引起的,audacity包含libmad)
解決方式是:找到libmad configure之後的Makefile,並vi Makefile
去掉129行"-fforce-mem"字串,因為arm-eabi編譯器都不支援這個選項,將其刪除之後,就ok了
###############################################################################################
Mplayer交叉編譯過程及問題解決辦法:
1、#cd /opt/Mplayer-1.0rc2
2、./configure --prefix=/tmp/mplayer --cc=arm-linux-gcc --target=arm-linux --enable-static --disable-win32dll
--disable-dvdread --disable-dvdread-internal --disable-dvdnav --disable-libdvdcss-internal --disable-mencoder
--disable-mp3lib --disable-armv5te --disable-armv6 --enable-fbdev --enable-mad --enable-libavcodec_a
--enable-libavcodec_mpegaudio_hp --disable-iconv --enable-linux-devfs --disable-ivtv
--language=zh_CN --enable-cross-compile --enable-real --enable-ossaudio --host-cc=gcc --disable-live
--with-extraincdir=/opt/FriendlyARM/toolschain/4.4.3/lib/include
--with-extralibdir=/opt/FriendlyARM/toolschain/4.4.3/lib/lib 2>&1|tee logfile
引數解釋:
--prefix mplayer安裝路徑,make install 後就可以在本目錄下找到可執行程式mplayer
--cc 交叉編譯工具,如果沒新增到環境變數,就要指定完整路徑
--enable-static 設定靜態連線
--disable-win32dll 禁用win32動態連結庫支援。在pre版本中該引數為
--disable-dvdread 禁用libdvdread.
--enable-fbdev 支援fbdev,這個一定要選上。
--disable-mp3lib 和 --enable-mad
arm系列的cpu,一般都沒浮點運算單元,而mplayer的mp3解碼預設使用mp3lib,這個是浮點運算庫,在arm上肯定跑不了,使用 ffmp3或者libmad(需要外部庫libmad支援)應該就沒問題了。所以這裡需要禁止掉mencoder和使能libmad。
--disable-mencoder 禁止編碼功能
--disable-live 禁止live 555流媒體。
--enable-libavcodec_a 啟用靜態的libavcodec解碼。在pre版本中該引數為--enable-libavcodec。
--disable-armv5te --disable-armv6 禁用armv5te、armv6指令擴充套件。
--with-extraincdir和-with-extralibdir 指定libmad和mad.h的路徑
3、make
make完後如出現如下問題:
問題一:
---------------------------------------------------------------------------------------------------------------------------------------------
......
......
armv4l/jrevdct_arm.S: Assembler messages:
armv4l/jrevdct_arm.S:59: Error: no such instruction: `stmdb sp!,{r4 - r12,lr}@all callee saved regs'
armv4l/jrevdct_arm.S:61: Error: too many memory references for `sub'
armv4l/jrevdct_arm.S:62: Error: invalid char '[' beginning operand 2 `[ sp]@save the DCT pointer to the stack'
armv4l/jrevdct_arm.S:64: Error: invalid character '=' in operand 2
armv4l/jrevdct_arm.S:65: Error: expecting operand after ','; got nothing
armv4l/jrevdct_arm.S:66: Error: too many memory references for `add'
armv4l/jrevdct_arm.S:68: Error: no such instruction: `ldrsh r0,[lr,'
armv4l/jrevdct_arm.S:69: Error: no such instruction: `ldrsh r1,[lr,'
armv4l/jrevdct_arm.S:71: Error: junk at end of line, first unrecognized character is `@'
armv4l/jrevdct_arm.S:72: Error: junk at end of line, first unrecognized character is `@'
armv4l/jrevdct_arm.S:73: Error: no such instruction: `ldr r5,[lr,'
armv4l/jrevdct_arm.S:74: Error: no such instruction: `ldr r2,[lr,'
......
......
armv4l/jrevdct_arm.S:347: Error: no such instruction: `bne column_loop'
armv4l/jrevdct_arm.S:350: Error: junk at end of line, first unrecognized character is `@'
armv4l/jrevdct_arm.S:351: Error: too many memory references for `add'
armv4l/jrevdct_arm.S:352: Error: no such instruction: `ldmia sp!,{r4 - r12,pc}@restore callee saved regs and return'
make[1]: *** [armv4l/jrevdct_arm.o] 錯誤 1
make[1]: Leaving directory `/home/zazhgf/Mplayer/MPlayer-1.0rc2/libavcodec'
make: *** [libavcodec/libavcodec.a] 錯誤 2
----------------------------------------------------------------------------------------------------------------------------------------------------
解決辦法:
在報錯檔案MPlayer-1.0rc2/libmpeg2/motion_comp_arm_s.S和MPlayer-1.0rc2/libavcodec/armv4l/dsputil_arm_s.S兩個s.S檔案的開始處新增如下程式碼:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
(這段程式碼意思是定義一個空的ARM彙編巨集 pld,這樣當程式碼出現pld指令,就變成一條空指令)
問題二:
------------------------------------------------------------------------------------------------------------------------------------------------------- vo_ivtv.c: In function 'ivtv_reset':
vo_ivtv.c:79: error: storage size of 'sd' isn't known
vo_ivtv.c:80: error: storage size of 'sd1' isn't known
vo_ivtv.c:84: error: 'IVTV_STOP_FL_HIDE_FRAME' undeclared (first use in this function)
vo_ivtv.c:84: error: (Each undeclared identifier is reported .ly .ce
vo_ivtv.c:84: error: for each function it appears in.)
vo_ivtv.c:87: error: 'IVTV_IOC_STOP_DECODE' undeclared (first use in this function)
vo_ivtv.c:97: error: 'IVTV_IOC_START_DECODE' undeclared (first use in this function)
vo_ivtv.c:80: warning: unused variable 'sd1'
vo_ivtv.c:79: warning: unused variable 'sd'
make[1]: *** [vo_ivtv.o] Error 1
make[1]: Leaving directory `/data1/wdy-tools/smplayer/MPlayer-1.0rc2/libvo'
make: *** [libvo/libvo.a] Error 2
-------------------------------------------------------------------------------------------------------------------------------------------------------------
解決辦法:
在 ./configure 時新增 --disable-ivtv 來解決(我的第2步中有這個引數)
問題三:
--------------------------------------------------------------------------------------------------------------------------------------------------------
undefined reference to `video_out_ivtv'
collect2: ld returned 1 exit status
---------------------------------------------------------------------------------------------------------------------------------------------------------
解決辦法:
開啟檔案 libvo/video_out.c,將其程式碼的以下部分:
#ifdef HAVE_DXR2
extern vo_functions_t video_out_dxr2;
#endif
extern vo_functions_t video_out_dxr3;
#ifdef HAVE_IVTV
extern vo_functions_t video_out_ivtv;
#endif
修改為:(紅色字型為新增部分)
#ifdef HAVE_DXR2
extern vo_functions_t video_out_dxr2;
#endif
#ifdef HAVE_DXR3
extern vo_functions_t video_out_dxr3;
#endif
#ifdef HAVE_IVTV
extern vo_functions_t video_out_ivtv;
#endif
(可能還會遇到別的問題,到網上搜去吧,大都能找得到答案)
4、重新make,應該就沒有問題
5、make install
這時如果出現以下問題:
-------------------------------------------------------------------------------------------------
install -m 755 -s mplayer /tmp/mplayer/bin
strip: Unable to recognise the format of the input file `/tmp/mplayer/bin/mplayer'
install: strip process terminated abnormally
make: *** [install-mplayer] 錯誤 1
---------------------------------------------------------------------------------------------------
不必理會,因為這時已經在/tem/mplayer/bin/下產生了可執行檔案mplayer了
###########################################################################################
將可執行程式mplayer移植到mini2440開發板的/usr/bin目錄下
(通過設定開發板使系統通過nfs啟動,然後掛載主機,進行移植)
###########################################################################################
在開發板下執行:# mplayer test.avi -framedrop -vf rotate=1 ,scale=240 : 320
在播放音訊或視訊檔案時會出現沒有聲音輸出的問題,終端提示
[AO OSS] audio_setup: Can't open audio device /dev/sound/dsp: No such file or dy
然而目標系統上有 /dev/dsp 音訊裝置檔案,只是OSS音訊驅動需要的是 /dev/sound/dsp 裝置檔案,簡單解決方法是建一個符號連結。
mkdir -p /dev/sound
ln -s /dev/dsp /dev/sound/
這樣問題就搞定了。可以把這兩條命令新增到目標系統的啟動檔案的適當位置,修改目標系統的 /etc/init.d/rcS 檔案。
再次# mplayer test.avi -framedrop -vf rotate=1 ,scale=240 : 320 就可以聽到聲音啦!
################################################################################################
到此,所有的工作已經完了,慢慢享受成功吧。嘿嘿。。。
相關文章
- Android開發過程中遇到的問題以及解決辦法 how toAndroid
- matlab編譯exe問題具體解決辦法Matlab編譯
- mplayer 移植到 arm 心得
- 記一次Razor Pages無法編譯問題及解決編譯
- 資料併發操作帶的的問題及解決辦法
- qt的工程,轉到vs後,中的檔案都編譯不過,解決辦法QT編譯
- Idea編譯錯誤解決辦法Idea編譯
- i.MX8MP開發板移植驅動全過程
- web開發技巧-網頁排版佈局常見問題及解決辦法Web網頁
- 你遇到過的相容性問題以及解決辦法
- 快取過程存在的三大問題及解決方案快取
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- 虛擬機器-Linux開發板交叉編譯問題記錄虛擬機Linux編譯
- 跨域問題解決辦法跨域
- 安裝IE8後引發的兩個問題及解決辦法
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- Jekyll 本地除錯部落格遇到的問題及解決辦法除錯
- MDK編譯過程及檔案型別全解編譯型別
- element-ui 的Dialog被蒙板遮住原因及解決辦法UI
- Word——編輯的公式顯示不完整問題的解決辦法公式
- golang windows10下 go build 無法編譯 問題解決GolangWindowsUI編譯
- svn相關問題解決辦法
- Qt+MPlayer音樂播放器開發筆記(一):ubuntu上編譯MPlayer以及Demo演示QT播放器筆記Ubuntu編譯
- 關於Android檔案數過大,分包問題的解決辦法Android
- 編譯問題解決:LINK : fatal error LNK1104: 無法開啟檔案“*.dll”編譯Error
- 交叉編譯庫依賴問題的解決方法編譯
- vscode“檢測到 #include 錯誤,請更新 includepath。”的問題解決辦法VSCode
- 編譯過程編譯
- 詳解Linux 程式編譯過程Linux編譯
- zlib庫編譯過程遇到的問題及其使用zlib庫進行解壓縮編譯
- 常見的HTTP介面超時問題出現原因及解決辦法HTTP
- input 與 button 的問題 (空隙/不等高/對不齊)及 解決辦法
- Ubuntu16.04編譯VIORB過程中遇到的問題 尤其是rosbag的問題Ubuntu編譯ORBROS
- oracle 11.2.0.4 DataGuard Broker配置過程中可能遇到的問題及解決方法Oracle
- munium學習過程中問題解決
- workerman開發過程中遇到的一些常見的問題與解決方法
- 編譯rocketmq-console並解決RejectedExecutionException問題編譯MQException
- 記一次 Composer 問題的解決過程!!