[置顶] Xvid在Linux/Unix下的编译(Cygwin/VMware)
2017-04-01 17:00
441 查看
### Date: 2017/4/1
### Advised at 2017/4/4
### Author: SoaringLee
最近两天在学习MPEG4的开源实现——xvid。首先是对xvid源码进行编译,前一篇介绍了xvid源码在win32(VS2013)上的编译方法,本篇介绍一下Xvid在Linux/Unix下的编译过程。
编译目录在build/generic下面,首先通过运行configure配置当前平台。类Unix环境可以采用mingw32或者cygwin。但是这里由于mingw32不能通过configure产生linux平台相应配置,所以这里在cygwin中进行编译。
配置之后直接make,但是出现了下面的错误:
这里是链接器ld出现了错误,原因是汇编产生的目标文件obj不能识别,具体原因还不清楚?这个问题后面有空了慢慢解决吧!~
问题解决:
在分析Xvid源码之前,这几天一直在思考这个导致这个问题的原因。目标文件格式不识别,应该是因为Windows和Linux中使用不同的目标文件格式,这里出现了不识别。在Stack overflow上找到问题:
If you are using a shared file system, you need to call
Windows and Linux use different object file formats, and as such you can not use the object files of one OS on another. When using a shared file system, the
not automatically guess that the object files should be recompiled and would use the old files compiled under a different OS. That would result in the error you observed.
但是具体原因是什么呢?
通过比对虚拟机上configure生成的platform.inc和cygwin下生成的platform.inc,终于找到了原因。从下图中可以看出,两个platform中的架构配置是不一样的。左边是cygwin下生成的,架构为x86的,动态库为.dll,目标文件为.obj,这些是当前windows平台的配置;右边是虚拟机下生成的,架构为GENERIC,动态库为.so,目标文件为.o。因此Windows和Linux下的动态库文件和目标文件的格式都是不一样的。在这里,当前架构的设置不能识别目标文件。因此,问题是出在了配置上!
编译后的结果如下:
最后,对examples文件夹下面的编码器demo和解码器demo进行编译运行。成功运行!
另外,可以转战到虚拟机上面继续进行编译:
步骤同上,但是没有cygwin上出现的问题了,看来这个类Unix模拟环境的配置还是很容易出现问题的呢!
(1)./configure
(2)make
这里在=build文件夹下面生成的libxvidcore.a和libxvidcore.so.4.3就是我们需要生成的库了。
轻松加愉快的就完成了xvid库在linux平台上的编译了!
(3)make install
不过这里库的安装需要root权限。通过su -获取root权限,安装就好了。
(4)接下来对examples下面的编码器demo和解码器demo进行编译运行。
make之后生成相应的可执行文件。
对foreman_cif.yuv进行编码:
运行成功,编码后生成了mpeg4码流文件foreman.m4v。
对foreman.m4v码流进行解码:
运行成功,解码后得到了重建yuv文件dec.yuv。
但是发现了2个小问题:
(1)对原始yuv视频采用xvid mpeg4编码器进行编码后,出现编码后的码流解码后的视频色彩失真问题。
(2)但是比较遗憾的是,yuvplayer这个软件只有windows版本的exe,没有linux下的,所以对解码后得到的dec.yuv不能进行播放和验证解码的正确性。一般情况下,这里的编码和解码应该都是正确的。
为了解决Linux下不能播放yuv文件的问题,接下来准备对yuvplayer的源码进行学习并编写linux平台的makefile,然后在linux下进行编译,得到相应的可执行文件。
yuvplayer的源码地址:https://github.com/Tee0125/yuvplayer
(https://sourceforge.net/p/raw-yuvplayer/code/HEAD/tree/)
https://github.com/latelee/YUVPlayer
未完待续~~~~
### Advised at 2017/4/4
### Author: SoaringLee
最近两天在学习MPEG4的开源实现——xvid。首先是对xvid源码进行编译,前一篇介绍了xvid源码在win32(VS2013)上的编译方法,本篇介绍一下Xvid在Linux/Unix下的编译过程。
编译目录在build/generic下面,首先通过运行configure配置当前平台。类Unix环境可以采用mingw32或者cygwin。但是这里由于mingw32不能通过configure产生linux平台相应配置,所以这里在cygwin中进行编译。
配置之后直接make,但是出现了下面的错误:
这里是链接器ld出现了错误,原因是汇编产生的目标文件obj不能识别,具体原因还不清楚?这个问题后面有空了慢慢解决吧!~
问题解决:
在分析Xvid源码之前,这几天一直在思考这个导致这个问题的原因。目标文件格式不识别,应该是因为Windows和Linux中使用不同的目标文件格式,这里出现了不识别。在Stack overflow上找到问题:
If you are using a shared file system, you need to call
make cleanwhen switching between Windows and Linux.
Windows and Linux use different object file formats, and as such you can not use the object files of one OS on another. When using a shared file system, the
makewill
not automatically guess that the object files should be recompiled and would use the old files compiled under a different OS. That would result in the error you observed.
但是具体原因是什么呢?
通过比对虚拟机上configure生成的platform.inc和cygwin下生成的platform.inc,终于找到了原因。从下图中可以看出,两个platform中的架构配置是不一样的。左边是cygwin下生成的,架构为x86的,动态库为.dll,目标文件为.obj,这些是当前windows平台的配置;右边是虚拟机下生成的,架构为GENERIC,动态库为.so,目标文件为.o。因此Windows和Linux下的动态库文件和目标文件的格式都是不一样的。在这里,当前架构的设置不能识别目标文件。因此,问题是出在了配置上!
编译后的结果如下:
最后,对examples文件夹下面的编码器demo和解码器demo进行编译运行。成功运行!
另外,可以转战到虚拟机上面继续进行编译:
步骤同上,但是没有cygwin上出现的问题了,看来这个类Unix模拟环境的配置还是很容易出现问题的呢!
(1)./configure
(2)make
这里在=build文件夹下面生成的libxvidcore.a和libxvidcore.so.4.3就是我们需要生成的库了。
轻松加愉快的就完成了xvid库在linux平台上的编译了!
(3)make install
不过这里库的安装需要root权限。通过su -获取root权限,安装就好了。
(4)接下来对examples下面的编码器demo和解码器demo进行编译运行。
make之后生成相应的可执行文件。
对foreman_cif.yuv进行编码:
运行成功,编码后生成了mpeg4码流文件foreman.m4v。
对foreman.m4v码流进行解码:
运行成功,解码后得到了重建yuv文件dec.yuv。
但是发现了2个小问题:
(1)对原始yuv视频采用xvid mpeg4编码器进行编码后,出现编码后的码流解码后的视频色彩失真问题。
(2)但是比较遗憾的是,yuvplayer这个软件只有windows版本的exe,没有linux下的,所以对解码后得到的dec.yuv不能进行播放和验证解码的正确性。一般情况下,这里的编码和解码应该都是正确的。
为了解决Linux下不能播放yuv文件的问题,接下来准备对yuvplayer的源码进行学习并编写linux平台的makefile,然后在linux下进行编译,得到相应的可执行文件。
yuvplayer的源码地址:https://github.com/Tee0125/yuvplayer
(https://sourceforge.net/p/raw-yuvplayer/code/HEAD/tree/)
https://github.com/latelee/YUVPlayer
未完待续~~~~
相关文章推荐
- 如何在Windows中编译Linux Unix的代码(采用cygwin)?
- Windows下Linux开发环境设置(二)--安装Cygwin及交叉编译工具链
- Windows下Linux开发环境设置--安装Cygwin及交叉编译工具链
- 007.Vmware-Linux 内核编译一
- linux下搭建unix编译环境
- 如何在Windows中编译Linux Unix的代码?
- VMware中Linux内核2.6.14.4编译全过程(终于编译通过了!!!)
- eclipse CDT cygwin编译linux源代码项目
- cygwin编译linux C程序
- Fedora9.0和VMware6.5下编译内核出现arm-linux-gcc无法找到的错误解决办法
- 远程调试编译LINUX,UNIX应用程序组件
- 解决 linux 编译定制新内核后 virtualbox和vmware无法使用的问题
- Vmware下成功编译linux内核2.6
- VMware 6 Linux 版本下载安装配置编译序列号注册码
- 005.Vmware-Linux 交叉编译环境的建立
- 在VMware上编译linux内核出现VFS: Cannot open root device "LABEL=/" or unknown-block(0,0) 错误的解决方法
- 深入理解Linux UNIX软件包的配置、编译与安装
- 用Cygwin模拟DB2的Unix/Linux开发环境(2)
- Linux|UNIX下LAMP环境的搭建及常见问题[连载9编译Apache]
- 009.Vmware-Linux 内核编译三