博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下编译调试x264
阅读量:2380 次
发布时间:2019-05-10

本文共 1534 字,大约阅读时间需要 5 分钟。

在中我们用vs2010编译了x264,但是过程很复杂,而且版本还是09年的,今天我将介绍在linux下编译最新版的x264,而且可以调试,近距离观察h264编码实现的每个细节。

1.下载x264源码

cd ~ 
git clone git://git.videolan.org/x264.git

这里我用git来下载最新的源码,也可以访问官网手动下载:

2.安装yasm

因为x264源码中有一些程序是用汇编写的,这样可以提高编码性能,所以在编译的时候需要一个汇编解释器。 如果用的是ubuntu系统的话可以使用

sudo apt-get install yasm

来安装,但由于更新源的问题安装的是0.8版本的yasm,而最新的x264要求的最低版本是1.0。没办法只能手动安装了,官网下载地址:

下载最新版的Source.tar.gz,解压安装

tar xzvf yasm-1.2.0.tar.gz 
cd yasm-1.2.0
./configure
make && make install

3.安装Code::Blocks

为了能够好的调试x264源码,我们需要一个IDE,在此我推荐Code::Blocks,在ubuntu自带的软件中心搜索安装即可。

4.建立x264工程

打开Code::Blocks,File->New->Project->Empty Progect->Go,Next,输入名称和路径,这里要和x264的路径一致,比如我的
code blocks x264 project

Next->Finish!
接下来开始配置工程,右键工程->Properties,补完Makefile的路径,选上“This is a customer file”,确定。code block setting

再次右键工程进入Properties,点击右下角Project’s build option,在Make commands选项卡中把所有$target去掉,确定。make commands右键工程->Build Option->Make commands,去掉所有$target,确定。
然后把一些主要的文件加到工程里去,比如x264.c。

4.1.Build

Build->Build,或者ctrl+F9,编译x264,0 errors, 0 warnings,在x264文件夹下生成x264可执行文件和一些过程文件。

4.2.Debug

首先在x264.c的main函数里加几个断点。

Debug->Start,出现错误:没有符号表被读取。请使用 “file” 命令。

这是由于x264可执行文件路径错误造成的,一般code blocks工程默认的编译路径是在bin/debug/x264,而我们是用Makefile编译的,x264文件就在当前目录下,gdb自然找不到文件了。解决的方法有两种:修改Makefile和修改codeBlocks的默认路径。因为Makefile是源码自带的,所以我选择修改codeBlocks。

右键工程->Properties->Build targets,在output filename里把路径改成当前文件夹,确定。
code blocks build targets

Debug->Start,再次出错:no debugging symbols found 。
这是因为在x264可执行文件中没有调试符号,这也是Debug版和Release版的区别,因为codeBlocks是根据Makefile编译的,所以要想加入调试信息就必须修改Makefile的配置。运行终端,

cd ~/x264 
./configure --enable-debug

之后会重新生成Makefile文件,Rebuild工程,Debug->Start,接下来就可以Next Line了。

转载地址:http://wpqxb.baihongyu.com/

你可能感兴趣的文章
ITL的含义
查看>>
P8-P9 | Fast-locking technique
查看>>
P10 | Saturated PFD technique (TCAS I-2018-01)
查看>>
P11 | Active-Mixer-Adopted SSPLL (AMASS-PLL) (JSSC-2020-06)
查看>>
HFSS安装出现Unable to detect installed products.config/admin.xml exists 问题
查看>>
如何在vue-cli中配置amazeui的vue版本
查看>>
vue-router路由切换 组件重用挖下的坑
查看>>
如何用vue 语法 给html元素绑定原生js DOM 事件
查看>>
vue非父子组件通信问题解决记录
查看>>
axios异步请求如何设置通过django的csrf验证
查看>>
js单线程执行引起的setTimeout和ajax执行的迷之bug
查看>>
自己动手实现简易的div可编辑富文本框及按下tab键后增加4个空格功能
查看>>
浅谈自己知道的首屏加载时间的优化策略
查看>>
java 集合类如何正确在迭代中添加删除元素
查看>>
如何在django中使用mysql数据库
查看>>
《matlab揭秘》解方程笔记
查看>>
《matlab揭秘》求极限,导数,微分方程,积分笔记
查看>>
matlab基础操作查漏补缺
查看>>
自定义BP神经网络参数
查看>>
灵活的string类与istringstream的联合使用
查看>>