您的位置:首页 > 其它

交叉编译x264(二)

2011-06-08 19:35 447 查看
实现步骤:

(1)安装编译环境Linux系统
,我是在Windows上安装的虚拟机,然后在虚拟
机之上安装的Linux系统。(在虚拟机下的Linux系统中注意,使用Linux与Windows的共享文件夹时,若要对解压文件进行解压,要将解压的
文件拷贝到虚拟机linux系统下,而不要在共享文件夹中进行解压,否则解压不成功。

(2)安装交叉编译器arm-linux-gcc 3.4.1,
其安装过程:将
arm-linux-gcc 3.4.1.tar.bz2拷贝到Linux系统下,如我拷到了/WeiLi目录下。—>解压,tar –jxvf
arm-linux-gcc 3.4.1.tar.bz2。—>将解压文件中的arm文件夹拷贝到/usr/local下,cp –rv arm
/usr/local。—>修改环境变量,即将arm-linux-gcc编译器指定为3.4.1,gedit
/root/.bashrc,在/root/.bashrc这个文件的最后一行添加上命令: export PATH
=$PATH:/usr/local/arm/3.4.1/bin。arm-linux-gcc 3.4.1便安装完毕,就可以使用此交叉编译器了。

注意:对于我们的开发板,配套使用的编译器是armv4l-unknown-linux-gcc,经我通过简单的hello.c程序测试,用
arm-linux-gcc编译出的可执行程序在实验台上也能正确运行,所以arm-linux-gcc和armv4l-unknown-linux-
gcc在一定程度上可以通用,可能只是版本问题。

(3)修改X264程序
,首先对程序进行一些地方的修改,否则会出现关于
cpu_set_t的错误,关于cpu_set_t的以下那段代码是关于计算CPU内核数的代码,所以将np=1(我们所使用的计算机都是单核)直接返
回,而没有用它的计算, #elif defined(SYS_LINUX) unsigned int bit; int np; cpu_set_t
p_aff; memset( &p_aff, 0, sizeof(p_aff) );sched_getaffinity( 0,
sizeof(p_aff), &p_aff );for( np = 0;bit = 0; bit < sizeof(p_aff);
bit++ );np += (((uint8_t *)&p_aff)[bit / 8] >> (bit % 8))
& 1;return np;改成了:#elif defined(SYS_LINUX) int np;np=1; return np;

(4)编译程序,
将x264-snapshot
20070920-2245拷贝到Linux系统下,(在虚拟机的共享文件夹下也可以)。./configure
--host=arm-linux。—>修改config.mak文件,将其中的CC=gcc,AS=yasm修改成CC=arm-linux-
gcc,AS=arm-linux-as。—>make。之后便生成了可执行文件X264。

注意:此处的X264程序一定要是未被其它编译器编译过的程序,即如果此X264是被gcc或者其它编译器编译过后的程序,再使用arm-linux-gcc 3.4.1编译,会出现collect2错误。

(5)将生成的可执行文件x264移植到开发板上,
运行x264 --qp 18
--keyint 240 --min-keyint 24 --ref 3 --mixed-refs --no-fast-pskip
--bframes 3 --b-pyramid --b-rdo --bime --weightb --trellis 1 --analyse
all --8x8dct --threads 3 --thread-input --progress --no-dct-decimate –o
out.264 foreman_part_qcif_444.yuv
352x288,其中目录下要有源文件foreman_part_qcif_444.yuv然后运行之后在目录下就会生成out.264压缩文件。

如果要生成动态库:

./configure --host=arm-linux --enable-shared

config.mak改成CC=arm-linux-gcc,AS=arm-linux-as

make-》得到libx264.so.56

至于怎么用该库,请查询相关资料
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: