交叉编译 feng ~~提供参考

http://hi.baidu.com/amixyue/blog/item/944adadfc1532aaacd1166bc.html 
我交叉编译的是feng -2.1.0
需要:
- a full Posix compatible system (suggested any linux distribution)
- gnu toolchain (gcc >= 3.4 , make >= 3.80, libtool >= 1.5.20) [1]
- glib-2 >= 2.10 [2]
- ffmpeg >= 0.5 [3]
- netembryo >= 0.1.0 [4]
- libev >= 3.48 [5]
交叉编译环境:
davinci:
Cross-Compile
使用:
ffmpeg 0.5
netembryo 0.1.1
libev 3.7
1
export prefix=/home/amy/workdir/cross-rtp/feng
echo $prefix
2
../libev-3.7/configure --prefix=$prefix --build=i386 --host=arm CC=arm_v5t_le-gcc
3
//before netembroyo
../lksctp-tools-1.0.11/configure --prefix=$prefix --build=i386 --host=arm CC=arm_v5t_le-gcc
这里是因为一般的 linux 发行版,准确的是内核,是不添加 sctp 支持的,因为这个毕竟是10年后的技术,因此,就需要安装 lksctp-tools-1.0.11 ,在 configure netembryo 的时候,要注意,sctp support ,否则 feng 无法运行
../netembryo-0.1.1/configure --prefix=$prefix --build=i386 --host=arm --enable-sctp --enable-ipv6  CC=arm_v5t_le-gcc LDFLAGS=-L/home/amy/workdir/cross-rtp/feng/lib CFLAGS=-I/home/amy/workdir/cross-rtp/feng/include
4
//before ffmpeg
CC=arm_v5t_le-gcc ../glib-2.22.4/configure --cache-file=glib.cache  --with-gnu-ld --prefix=$prefix --build=i386 --host=arm
注意: glib 的编译,glib 是个很强大的库,提供很多函数,在 ffmpeg 编译的时候需要

glib.cache 这样写
glib_cv_stack_grows=no
glib_cv_uscore=yes
ac_cv_func_posix_getpwuid_r=no
ac_cv_func_nonposix_getpwuid_r=no
ac_cv_func_posix_getgrgid_r=no
具体问题,可以参考官网
为什么要有 glib.cache 呢?很简单,就是因为它是库函数,关于运行平台,而平台的参数,因为是 cross-compile ,没有办法读取,因此,就要 .cache 了

可能遇到的错误:
error:
libtool: eval: line 964: syntax error near unexpected token `|'
tricky solution(解决方案)
USE_ARCH=32 NM=nm CC="mipsel-linux-gnu-gcc ${BUILD32}" ./configure \
--with-gnu-ld \
--target=mipsel-linux \
--host=mipsel-linux \
CC=mipsel-linux-gnu-gcc \
--prefix=/usr

5.
../ffmpeg-0.5/configure --arch=arm --prefix=$prefix --cc=arm_v5t_le-gcc --enable-cross-compile --host-ldflags=-L/home/amy/workdir/cross-rtp/feng/lib --host-cflags=-I/home/amy/workdir/cross-rtp/feng/include --disable-stripping

libtool经常会遇到版本问题,以下是我总结,希望有高手能系统地总结
1重新安装
../libtool-1.5.20/configure --prefix= --build=i386 --host=arm  CC=arm_v5t_le-gcc
2有人说可以改文件里面的 $echo ,不是很懂
$echo -> $ECHO
3这是很多开源软件的 README 提供的方案
libtoolize --copy --force
4就是上面 glib 上提到的
tricky
关于 libtool 是很值得去探究下的,不管使自己写软件用,还是以后交叉编译,编译

6
export PKG_CONFIG_PATH=/home/amy/workdir/cross-rtp/feng/lib/pkgconfig
要 export PKG_CONFIG_PATH
这是关于 pkg 的问题,随后我会再加 博文上去
CC=arm_v5t_le-gcc CFLAGS=-I/home/amy/workdir/cross-rtp/feng/include LDFLAGS=-L/home/amy/workdir/cross-rtp/feng/lib ../feng-2.1.0_rc1/configure --prefix=$prefix --build=i386 --host=arm   --enable-sctp --enable-ipv6
feng 的交叉编译就到这里

还有一些小 tips
在编译过程中总会涉及到工具库的使用,如果真的是工具库,其实可以考虑要不要交叉编译,能不能直接 apt-get ,这里我的看法是:如果是动态链接,那是交叉编译定了,如果是静态链接,倒可以考虑 apt-get ,因为静态链接是编译时引用相关函数
还有,根据经验,ubuntu 9.04 的apt-get 的库版本都太低,可以考虑升级一下 ,最简单的办法就是修改 source .list ,修改为 ubuntu 9.10 的代号,就可以 apt-get 很新的包了

就先这样,如果有问题,可以留言联系我
随时互通有无

你可能感兴趣的:(linux,ubuntu,Path,token,工具,平台)