Ubuntu 10.04 下编译交叉工具链GCC 4.5.1
来源:互联网 发布:淘宝智能版全屏宽图 编辑:程序博客网 时间:2024/04/27 13:51
从网上看到一篇编译gcc的文章,自己动手试了下,改了些代码,成功。下面是具体步骤:
1. 下载二进制文件处理工具集合binutils-2.20.1.tar.bz2,下载地址为 http://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.bz2
2. 下载GNU编译器集合gcc-4.5.1.tar.bz2(也可仅下载core和g++),下载地址为 http://gcc.parentingamerica.com/releases/gcc-4.5.1/gcc-4.5.1.tar.bz2
3. 下载编译GCC-4.5.0的依赖库:
gmp-5.0.1.tar.bz2: 下载地址为 ftp://ftp.gmplib.org/pub/gmp-5.0.1/gmp-5.0.1.tar.bz2
mpfr-3.0.0.tar.bz2: 下载地址为 http://www.mpfr.org/mpfr-current/mpfr-3.0.0.tar.bz2
mpc-0.8.2.tar.gz: 下载地址为 http://www.multiprecision.org/mpc/download/mpc-0.8.2.tar.gz
4. 下载C语言库newlib-1.18.0.tar.gz,下载地址为 ftp://sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz
5. 下载调试器gdb-7.2.tar.bz2,下载地址为 http://ftp.gnu.org/gnu/gdb/gdb-7.2.tar.bz2
6. 将所有文件都拷贝到同一目录下,然后进入此目录,执行:gedit Makefile &
如果仅是编译内核或其他不进行系统调用的程序,可以添加以下内容:
TARGET= arm-cortex-eabi
PREFIX=/opt/$(TARGET)-tools/
TEMP_PREFIX=$(HOME)/build-temp/
PROCS=2
BINUTILS_REV = 2.20.1
GCC_REV = 4.5.1
GMP_REV = 5.0.1
MPFR_REV = 3.0.0
MPC_REV = 0.8.2
NEWLIB_REV = 1.18.0
NEWLIB_FLAGS="-ffunction-sections -fdata-sections -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer -fno
-unroll-loops -D__BUFSIZ__=256 -mabi=aapcs"
GDB_REV = 7.2
all: prerequest install-deps install-cross
prerequest:
mkdir -p $(PREFIX)/bin
mkdir -p $(TEMP_PREFIX)/lib
apt-get install curl flex bison libgmp3-dev libmpfr-dev autoconf texinfo build-essential texlive libncurses5-dev
install-deps: gmp mpfr mpc
install-cross: cross-binutils cross-gcc cross-g++ cross-newlib cross-gdb
gmp: gmp-$(GMP_REV).tar.bz2
tar -xvf $<
mkdir -p build/gmp && cd build/gmp && /
pushd ../../gmp-* ; /
make clean; /
popd ; /
../../gmp-*/configure --disable-shared --prefix=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
mpfr: mpfr-$(MPFR_REV).tar.bz2
tar -xvf $<
mkdir -p build/mpfr && cd build/mpfr && /
bushed ../../mpfr-* ; /
make clean ; /
popd ; /
../../mpfr-*/configure LDFLAGS="-Wl,-search_paths_first" --disable-shared --with-gmp=$(TEMP_PREFIX) --
prefix=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) all && /
$(MAKE) install
mpc: mpc-$(MPC_REV).tar.gz gmp mpfr
tar -xvf $<
mkdir -p build/mpc && cd build/mpc && /
pushed ../../mpc-* ; /
make clean ; /
popd ; /
../../mpc-*/configure --disable-shared --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --prefix=$(TEMP_PREFIX)
&& /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
cross-binutils: binutils-$(BINUTILS_REV).tar.bz2
tar -xvf $<
mkdir -p build/binutils && cd build/binutils && /
pushd ../../binutils-* ; /
make clean ; /
popd ; /
../../binutils-*/configure --prefix=$(PREFIX) --target=$(TARGET) --disable-shared --disable-nls --disable-werror && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
cross-gcc: gcc-$(GCC_REV).tar.bz2 cross-binutils
tar -xvf $<
mkdir -p build/gcc && cd build/gcc && /
pushd ../../gcc-* ; /
make clean ; /
popd ; /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../gcc-*/configure --prefix=$(PREFIX) --target=$(TARGET) --enable-languages="c" --with-gnu-ld --with-gnu-as --
with-newlib --disable-nls --disable-libssp --with-newlib --without-headers --disable-shared --disable-threads --disable-
libmudflap --disable-libgomp --disable-libstdcxx-pch --disable-libunwind-exceptions --disable-libffi --enable-extra-sgxxlite
-multilibs --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --with-mpc=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install && /
ln -sv $(PREFIX)/bin/$(TARGET)-gcc $(PREFIX)/bin/$(TARGET)-cc
cross-newlib: newlib-$(NEWLIB_REV).tar.gz cross-binutils cross-gcc
tar -xvf $<
mkdir -p build/newlib && cd build/newlib && /
pushd ../../newlib-* ; /
make clean ; /
popd ; /
export PATH=$(PREFIX)/bin:$(PATH) && /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../newlib-*/configure --prefix=$(PREFIX) --target=$(TARGET) --disable-newlib-supplied-syscalls --disable-libgloss
--disable-nls --disable-shared && /
$(MAKE) -j$(PROCS) CFLAGS_FOR_TARGET=$(NEWLIB_FLAGS) CCASFLAGS=$(NEWLIB_FLAGS) && /
$(MAKE) install
cross-g++: gcc-$(GCC_REV).tar.bz2 cross-gcc cross-newlib
tar -xvf $<
mkdir -p build/g++ && cd build/g++ && /
pushd ../../gcc-* ; /
make clean ; /
popd ; /
export PATH=$(PREFIX)/bin:$(PATH) && /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../gcc-*/configure --prefix=$(PREFIX) --target=$(TARGET) --enable-languages="c++" --with-gnu-ld --with-gnu-as --
with-newlib --disable-nls --disable-libssp --with-newlib --without-headers --disable-shared --disable-threads --disable-
libmudflap --disable-libgomp --disable-libstdcxx-pch --disable-libunwind-exceptions --disable-libffi --enable-extra-sgxxlite
-multilibs --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --with-mpc=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
cross-gdb: gdb-$(GDB_REV).tar.bz2
tar -xvf $<
mkdir -p build/gdb && cd build/gdb && /
pushd ../../gdb-* ;/
make clean ; /
popd ; /
export PATH=$(PREFIX)/bin:$(PATH) && /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../gdb-*/configure --prefix=$(PREFIX) --target=$(TARGET) --disable-shared --disable-werror && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
.PHONY: clean, distclean
distclean: clean
rm -fr $(PREFIX)
clean:
rm -fr build binutils-$(BINUTILS_REV) gcc-$(GCC_REV) gdb-$(GDB_REV) gmp-$(GMP_REV) mpc-$(MPC_REV) mpfr-$(MPFR_REV)
newlib-$(NEWLIB_REV) $(TEMP_PREFIX)
如果想完整编译,添加以下内容:
TARGET= arm-linux-eabi
PREFIX=/opt/arm-linux-tools/
TEMP_PREFIX=$(HOME)/build-temp/
PROCS=2
BINUTILS_REV = 2.20.1
GCC_REV = 4.5.1
GMP_REV = 5.0.1
MPFR_REV = 3.0.0
MPC_REV = 0.8.2
NEWLIB_REV = 1.18.0
NEWLIB_FLAGS="-ffunction-sections -fdata-sections -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -Os -fomit-frame-pointer -fno-unroll-loops -D__BUFSIZ__=256 -mabi=aapcs"
GDB_REV = 7.2
all: prerequest install-deps install-cross
prerequest:
mkdir -p $(PREFIX)/bin
mkdir -p $(TEMP_PREFIX)/lib
apt-get install curl flex bison libgmp3-dev libmpfr-dev autoconf texinfo build-essential texlive libncurses5-dev
install-deps: gmp mpfr mpc
install-cross: cross-binutils cross-newlib cross-gcc1 cross-gcc2 cross-gdb
gmp: gmp-$(GMP_REV).tar.bz2
tar -xvf $<
mkdir -p build/gmp && cd build/gmp && /
pushd ../../gmp-* ; /
make clean; /
popd ; /
../../gmp-*/configure --disable-shared --prefix=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
mpfr: mpfr-$(MPFR_REV).tar.bz2 gmp
tar -xvf $<
mkdir -p build/mpfr && cd build/mpfr && /
bushed ../../mpfr-* ; /
make clean ; /
popd ; /
../../mpfr-*/configure LDFLAGS="-Wl,-search_paths_first" --disable-shared --with-gmp=$(TEMP_PREFIX) --prefix=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) all && /
$(MAKE) install
mpc: mpc-$(MPC_REV).tar.gz gmp mpfr
tar -xvf $<
mkdir -p build/mpc && cd build/mpc && /
pushed ../../mpc-* ; /
make clean ; /
popd ; /
../../mpc-*/configure --disable-shared --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --prefix=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
cross-binutils: binutils-$(BINUTILS_REV).tar.bz2
tar -xvf $<
mkdir -p build/binutils && cd build/binutils && /
pushd ../../binutils-* ; /
make clean ; /
popd ; /
../../binutils-*/configure --prefix=$(PREFIX) --target=$(TARGET) --disable-shared --disable-nls --disable-werror && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
cross-gcc1: gcc-$(GCC_REV).tar.bz2 cross-binutils
tar -xvf $<
mkdir -p build/gcc && cd build/gcc && /
pushd ../../gcc-* ; /
make clean ; /
popd ; /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../gcc-*/configure --prefix=$(PREFIX) --target=$(TARGET) --enable-languages="c" --with-gnu-ld --with-gnu-as --with-newlib --disable-nls --disable-shared --disable-threads --disable-libssp --disable-libmudflap --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --with-mpc=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install && /
ln -sv $(PREFIX)/bin/$(TARGET)-gcc $(PREFIX)/bin/$(TARGET)-cc
cross-newlib: newlib-$(NEWLIB_REV).tar.gz cross-binutils cross-gcc1
tar -xvf $<
mkdir -p build/newlib && cd build/newlib && /
pushd ../../newlib-* ; /
make clean ; /
popd ; /
export PATH=$(PREFIX)/bin:$(PATH) && /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../newlib-*/configure --prefix=$(PREFIX) --target=$(TARGET) --disable-nls --disable-shared && /
$(MAKE) -j$(PROCS) CFLAGS_FOR_TARGET=$(NEWLIB_FLAGS) CCASFLAGS=$(NEWLIB_FLAGS) && /
$(MAKE) install
cross-gcc2: gcc-$(GCC_REV).tar.bz2 cross-gcc1 cross-newlib
tar -xvf $<
mkdir -p build/g++ && cd build/g++ && /
pushd ../../gcc-* ; /
make clean ; /
popd ; /
export PATH=$(PREFIX)/bin:$(PATH) && /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../gcc-*/configure --prefix=$(PREFIX) --target=$(TARGET) --enable-languages="c,c++" --with-gnu-ld --with-gnu-as --with-newlib --disable-nls --disable-shared --with-gmp=$(TEMP_PREFIX) --with-mpfr=$(TEMP_PREFIX) --with-mpc=$(TEMP_PREFIX) && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
cross-gdb: gdb-$(GDB_REV).tar.bz2 cross-gcc2
tar -xvf $<
mkdir -p build/gdb && cd build/gdb && /
pushd ../../gdb-* ;/
make clean ; /
popd ; /
export PATH=$(PREFIX)/bin:$(PATH) && /
export LD_LIBRARY_PATH=$(TEMP_PREFIX)/lib:$(LD_LIBRARY_PATH) && /
../../gdb-*/configure --prefix=$(PREFIX) --target=$(TARGET) --disable-shared --disable-werror && /
$(MAKE) -j$(PROCS) && /
$(MAKE) install
.PHONY: clean, distclean
distclean: clean
rm -fr $(PREFIX)
clean:
rm -fr build binutils-$(BINUTILS_REV) gcc-$(GCC_REV) gdb-$(GDB_REV) gmp-$(GMP_REV) mpc-$(MPC_REV) mpfr-$(MPFR_REV) newlib-$(NEWLIB_REV) $(TEMP_PREFIX)
7. gedit ~/.bashrc &
在文件末尾添加以下内容:
export PATH=/opt/arm-cortex-eabi-tools/bin:$(PATH)
8. sudo make all
9. sudo make clean
至此,工具编译成功。对于第一种配置,不产生crt0.o,并且工具链不提供任何系统调用支持,所以不能编译应用程序,仅能编译内核或者其他与不进行任何系统调用的程序,目标系统试过arm-elf,也能成功编译。对于第二种配置可以编译内核和应用程序,试过arm-linux-eabi,都可以成功编译。
- Ubuntu 10.04 下编译交叉工具链GCC 4.5.1
- Ubuntu 10.04 下编译交叉工具链arm-linux-gcc 4.5.1
- ubuntu下编译交叉编译工具链
- ubuntu下安装交叉编译工具链
- ubuntu下安装交叉编译工具链
- Linux下安装gcc交叉编译工具
- ubuntu下安装arm-linux-gcc交叉工具链
- Ubuntu下安装arm-linux-gcc交叉编译链
- ubuntu下安装arm-linux-gcc交叉编译链
- 【转】Ubuntu 12.04下安装arm-linux-gcc等gnu arm toolchain交叉编译工具
- arm-linu-gcc 4.2.1交叉编译工具链制作
- arm gcc交叉编译工具链建立
- 构建gcc交叉编译工具链
- 搭建GCC交叉编译工具链
- Ubuntu 下建立ARM交叉编译工具链(转)
- ubuntu 10.4下安装交叉编译工具链
- ubuntu 10.4下安装交叉编译工具链
- Ubuntu下安装、配置交叉编译工具链
- PE section 的标志位
- nokia和LG手机的恢复出厂设置
- web标准学习第四天:三列布局
- java克隆入门和深入
- NTFS文件系统USN日志
- Ubuntu 10.04 下编译交叉工具链GCC 4.5.1
- ASH与AWR
- 在频道首页按向下方向键焦点应该落在下方的频道名称上,现在落在了下方频道的回看按钮上。
- query 如何修改附加的选择参数在界面上的顺序。
- [ZT]asp.net表单验证控件的介绍以及用法详解
- VS2010项目转换到VS2008下方法
- jquery学习要点
- 编译安装arm-linux交叉编译工具链
- test