最新编译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 编译的。

所以 觉得是交叉编译器混用导致的结果。 要改的东西就多了.....



你可能感兴趣的:(嵌入式,linux)