要重新編譯過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 編譯的。
所以 覺得是交叉編譯器混用導致的結果。 要改的東西就多了.....