1 、 binutils
2、 gcc
3、glibc:有时出于减小 libc 库大小的考虑,你也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。
2、 gcc-3.4.5 cgcc-3.3.6 glibc-2.3.2 binutils-2.15 linux-2.6.8 hdrs-2.6.12.0
3、 gcc-3.4.5 cgcc-3.4.5 glibc-2.3.5 binutils-2.15 linux-2.6.8 hdrs-2.6.12.0
4、 gcc-3.4.5 cgcc-3.4.5 glibc-2.3.6 binutils-2.15 linux-2.6.8 hdrs-2.6.12.0
6、 gcc-4.0.2 cgcc-4.0.2 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0
7、 gcc-4.0.2 cgcc-4.0.2 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0
9、 gcc-4.1.0 cgcc-3.3.6 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0
10、gcc-4.1.0 cgcc-3.3.6 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0
12、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 tls
13、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0
14、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 tls
cd embedded mkdir build-tools kernel tools |
cd $PRJROOT/build-tools mkdir build-binutils build-boot-gcc build-gcc build-glibc gcc-patch |
build-boot-gcc - 编译gcc 启动部分的目录
build-glibc - 编译glibc的目录
build-gcc - 编译gcc 全部的目录
gcc-patch - 放gcc的补丁的目录
export PRJROOT=/home/liushaofeng/embedded export TARGET=powerpc-linux export PREFIX=$PRJROOT/tools export TARGET_PREFIX=$PREFIX/$TARGET export PATH=$PREFIX/bin:$PATH |
cd $PRJROOT/kernel tar zxvf linux-2.4.20.tar.gz cd linux-2.4.20 make ARCH=ppc CROSS_COMPILE=powerpc-linux- menuconfig |
mkdir -p $TARGET_PREFIX/include ln -s $PRJROOT/kernel/linux-2.4.20/include/linux $TARGET_PREFIX/include/linux ln -s $PRJROOT/kernel/linux-2.4.20/include/asm-ppc $TARGET_PREFIX/include/asm ln -s $PRJROOT/kernel/linux-2.4.20/include/asm-generic $TARGET_PREFIX/include/asm-generic |
mkdir -p $TARGET_PREFIX/include cp -r include/linux $TARGET_PREFIX/include cp -r include/asm-ppc $TARGET_PREFIX/include cp -r include/asm-generic $TARGET_PREFIX/include |
首先,我们解压我们下载的binutils源文件。
cd $PRJROOT/build-tools tar -xvzf binutils-2.10.tar.gz |
cd build-binutils ../binutils-2.10/configure --target=$TARGET --prefix=$PREFIX |
会出现很多 check,最后产生 Makefile 文件。有了 Makefile 后,我们来编译并安装 binutils,命令很简单。
make make install |
cd $PRJROOT/build-tools tar -xvzf gcc-2.95.3.tar.gz |
../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --without-headers --enable-language=c --with-newlib (ppc) make all-gcc make install-gcc |
cd $PRJROOT/build-tools tar xvzf glibc-2.2.3.tar.gz tar xvzf glibc-linuxthreads-2.2.3.tar.gz --directory=glibc-2.2.3 cd build-glibc CC=powerpc-linux-gcc ../glibc-2.2.3/configure --host=$TARGET --prefix="/usr" --enable-add-ons --with-headers=$TARGET_PREFIX/include make make install_root=$TARGET_PREFIX prefix="" install |
make -i install_root=$TARGET_PREFIX prefix=" " install |
(/home/liushaofeng/embedded/tools/ppc-linux/lib/libc.so) ,
改为GROUP ( libc.so.6 libc_nonshared.a)
--enable-languages=c,c++ 告诉 full gcc 支持 c 和 c++ 语言。然后编译和安装你的 full gcc
cd $PRJROOT/build-tools/build-gcc ../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ make all make install |
powerpc-linux-gcc simple.c -o simple
file simple
说明:
add2line - 将你要找的地址转成文件和行号,它要使用 debug 信息。
ar - 产生、修改和解开一个存档文件
as -gnu 的汇编器
c++filt -c++ 和java中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,c++filt 就是实现这种反向的转化,根据标号得到函数名。
c++ -gnu 的 c++ 编译器。
cpp -gnu 的 c 的预编译器
gasp -gnu 汇编器预编译器。
gcc -gnu 的 c 语言编译器
gcov -gcc 的辅助测试工具,可以用它来分析和优程序。
g++ -gnu 的 c++ 编译器。
ld -gnu 的连接器
nm - 列出目标文件的符号和对应的地址
objcopy - 将某种格式的目标文件转化成另外格式的目标文件
objdump - 显示目标文件的信息
ranlib - 为一个存档文件产生一个索引,并将这个索引存入存档文件中
readelf - 显示 elf 格式的目标文件的信息
size - 显示目标文件各个节的大小和目标文件的大小
strings - 打印出目标文件中可以打印的字符串,有个默认的长度为 4
strip -剥掉目标文件的所有的符号信息
unprotoize - 将 ansi c 的源码转化为 k&r c 的形式,去掉函数原型中的参数类型。
protoize - 与unprotoize相反,将k&r c的源码转化为ansi c的形式,函数原型中加入参数类型。
../../gcc-2.95.3/gcc/libgcc2.c:41: stdlib.h: No such file or directory
../../gcc-2.95.3/gcc/libgcc2.c:42: unistd.h: No such file or directory
make[3]: *** [libgcc2.a] Error 1
make[2]: *** [stmp-multilib-sub] Error 2
make[1]: *** [stmp-multilib] Error 1
make: *** [all-gcc] Error 2