最新編譯mjpg-streamer 的問題集錦

要重新編譯過mjpeg-streamer,原先是r63的版本,很老的一個版本,編譯的時候因爲頭文件linux/videodev.h 已經被替代了。

索性就換成最新版本的mjpeg-streamer 好了,反正我是從svn服務器上面下載的。 在xp電腦下,地址是https://svn.code.sf.net/p/mjpg-streamer/code/

最後一個斜槓也不能少哦,少了也不行,我嘗試了幾次。

不過使用新的mjpg-streamer 也弄出不少問題。


問題一

遵從這篇文章去修改http://lexandros.blog.163.com/blog/static/185566588201272813640474/

因爲要指定 libjpeg 的include 路徑和 lib路徑,自己偷懶,索性在Makefile 中定義了一個變量PATH。

每次執行到uvc_input 裏的Makefile時候,總是說CC 或者 arm-linux-gcc 的命令找不到,command not found.

自己也是一頭霧水。不過後來別人提點才發現,自己的PATH吧環境變量中的PATH 給替換了,所以才找不到命令。

解決方法也比較簡單,將PATH的名字稍微改一下,不要和系統環境變量重名就可以了。


問題二,爆出的錯誤就是如下

 plugins/input_uvc all
 make[1]: Entering directory `/home/swchen/code/tools/mjpeg/mjpg-streamer/plugins/input_uvc'
 arm-linux-gcc -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/swchen/code/tools/libjpeg/jpeg-install/include -o input_uvc.so input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo -ljpeg -L /home/swchen/code/tools/libjpeg/jpeg-install/lib
 /home/swchen/enviroment/4.1.2/bin/../lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/bin/ld: v4l2uvc.lo: Relocations in generic ELF (EM: 3)
 /home/swchen/enviroment/4.1.2/bin/../lib/gcc/arm-angstrom-linux-gnueabi/4.1.2/../../../../arm-angstrom-linux-gnueabi/bin/ld: v4l2uvc.lo: Relocations in generic ELF (EM: 3)
 v4l2uvc.lo: could not read symbols: File in wrong format
 collect2: ld returned 1 exit status
 make[1]: *** [input_uvc.so] Error 1
 make[1]: Leaving directory `/home/swchen/code/tools/mjpeg/mjpg-streamer/plugins/input_uvc'
 make: *** [input_uvc.so] Error 2

說的是錯誤的格式。 但是自己很確定自己在編譯libjpeg的使用時交叉編譯的,這麼說的話libjpeg就不會有問題的。

是在mjpg-streamer這邊出了問題,由於問題一的緣故,自己使用了make 和 make CC=arm-linux-gcc 重複了很多次。

所以有部分的生成的文件 是x86下的。 所以才導致了這個問題。

這個只要清空一下就好,make clean -w ,再重新編譯,這個問題跳過了。


問題三

make[1]: Entering directory `/home/swchen/code/tools/mjpeg/mjpg-streamer/plugins/input_uvc'
 arm-linux-gcc -c -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/swchen/code/tools/libjpeg/jpeg-install/include -o v4l2uvc.lo v4l2uvc.c
 arm-linux-gcc -c -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/swchen/code/tools/libjpeg/jpeg-install/include -o jpeg_utils.lo jpeg_utils.c
 arm-linux-gcc -c -O1 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I /home/swchen/code/tools/libjpeg/jpeg-install/include -o dynctrl.lo dynctrl.c
 dynctrl.c:88: error: ‘V4L2_CID_PAN_RELATIVE’ undeclared here (not in a function)
 dynctrl.c:98: error: ‘V4L2_CID_TILT_RELATIVE’ undeclared here (not in a function)
 dynctrl.c:108: error: ‘V4L2_CID_PAN_RESET’ undeclared here (not in a function)
 dynctrl.c:118: error: ‘V4L2_CID_TILT_RESET’ undeclared here (not in a function)
 make[1]: *** [dynctrl.lo] Error 1
 make[1]: Leaving directory `/home/swchen/code/tools/mjpeg/mjpg-streamer/plugins/input_uvc'
 make: *** [input_uvc.so] Error 2

好端端的又是參數沒有定義,這個怎麼回事?

後來才瞭解到時編譯器的問題,我用的編譯器是4.1.2,而其內部的頭文件雖然也包含videodev2.h,內部卻不包含這個宏定義。

觀看另外一個編譯器,4.5.1,裏面的videodev2.h 就有包含上述的宏定義。看來得更換編譯器了,要不然連編譯都過不了。


哈,終於通過了,一個下午時間.....


不過隨之而來的是另外一個麻煩,就是illegal instruction。

原先編譯器自帶的glibc 版本和 後來的glibc版本不對應,而板子上的buybox 等等都是通過4.1.2 編譯的。

所以 覺得是交叉編譯器混用導致的結果。 要改的東西就多了.....



發佈了30 篇原創文章 · 獲贊 8 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章