1.交叉编译glibc
PATH=$PATH:cross_compiler_binary_path
prefix=arm-linux-gnueabi-
export CC="${prefix}gcc "
export CXX="${prefix}g++ "
export CPP="${prefix}gcc -E "
export AS="${prefix}as "
export LD="${prefix}ld "
export GDB=${prefix}gdb
export STRIP=${prefix}strip
export RANLIB=${prefix}ranlib
export OBJCOPY=${prefix}objcopy
export OBJDUMP=${prefix}objdump
export AR=${prefix}ar
export NM=${prefix}nm
../configure --host=arm-linux CC=arm-linux-gnueabi-gcc --prefix=${PWD}/__install
交叉编译glibc-2.30成功了, 但是2.17却不行,搁置未解决
2.交叉编译gcc
../configure --prefix=`pwd`/build/install --enable-checking=release --enable-languages=c,c++ --enable-threads=posix --disable-multilib --host=arm-linux --target=arm-linux
未解决,搁置中:
3.在旧版本glibc系统上运行新版本glibc编译出的程序
2021/04/28
今天学到了一个新知识,以前也会遇到过这样的问题,但是一直也没留心,没有还是一个有点棘手的问题
开始我想更新目标系统中的glibc,但是事实证明,这种做法真的是太危险了!一旦出错,所有的shell命令几乎都用不了了,系统也会无法重启,
后来转变思路,把新交叉编译的新版本glibc拷贝到目标系统的其他目录中(区别于系统的库目录 比如/root/lib),
再修改 LD_LIBRARY_PATH, 和可执行文件的interpreter,
就是红框框住的interpreter, 这个东西是写死在文件里的, 可执行文件会在这个目录找到动态链接器,就是这个/root/lib/ld-linux.so.3 是新版glibc的重要共享库,
修改interpreter:
patchelf --set-interpreter /root/lib/ld-linux.so.3 ./appbase_example
4. 交叉编译zlib
这个简单, 配置一下prefix就没别的了
5.交叉编译mplayer
./configure --target=arm-linux --prefix=~/install/mplayer
编译时候出现了上面图示的问题, 查了一下decode_frame等应该是zlib库中定义的,就先交叉编译个zlib,
还有个值得注意的地方是编译mplayer时候 查找库的一个path是 ${prefix}/lib
然后我手工修改了config.mak, 增加了“-lz”, 我觉得正常应该是也可以configure配置的,但是没有找到方法
编译成功啦, 后面我想编译一个带GUI的, 但是貌似又要编个x11了,to be continued