交叉编译x264(二)

实现步骤:

(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

至于怎么用该库,请查询相关资料

你可能感兴趣的:(交叉编译x264(二))