我可以建立ARM GCC与X64吗?(Can I build gcc for ARM with an

2019-10-21 02:42发布

我需要一个明确的答案,因为这仍然是我不清楚,我不能在这个文档中其他地方找到一个明确的答案。

假设我有一个工作gcc工具链,其中

host    x86_64-linux-gnu
target  x86_64-linux-gnu

,问题是现在我还能配置和构建gcc来源有?

host    x86_64-linux-gnu
build   x86_64-linux-gnu
target  arm-gnu-eabi

为什么我会喜欢上这个答案的原因是关于我是否应该花时间来尝试不同的配置我的图书馆,是否无论是否用于构建脚本gcc能够一些隐含的第1阶段的构建 ,可以潜在地引导了的对我来说ARM编译器暂时在这64位,所以我可以生成我需要我想要的目标的工具链。

Answer 1:

“我可以建立海合会为ARM与X64吗?”

是的你可以。 我已经在描述一个SUSE Linux主机开发系统这个过程中我的博客文章 。

================================================== ================================我要在这里复制的步骤:

1.确保有安装了必要的头和库

我已经使用YaST的“安装软件”功能,安装下面的包,这将需要完成所有的构建步骤(只搜索包名,选择并接受):


  • GMP-devel的
  • MPFR-devel的
  • MPC-devel的
  • texinfo的
  • ncurses的devel的
  • 的termcap

2.创建一个目录骨架


cd ~
mkdir arm-none-eabi arm-none-eabi-src
cd arm-none-eabi
mkdir src build
cd ~/arm-none-eabi-src
mkdir src build

3.下载的源码包,并提取它们

我使用gcc-4.7.1这里,但同样的过程当然会申请GCC的新版本。


cd ~/arm-none-eabi-src/src

wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.7.1/gcc-4.7.1.tar.bz2
wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2
wget ftp://ftp.gnu.org/gnu/gdb/gdb-7.4.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.20.0.tar.gz

tar -xf gcc-4.7.1.tar.bz2
tar -xf binutils-2.22.tar.bz2
tar -xf gdb-7.4.tar.bz2
tar -xf newlib-1.20.0.tar.gz

4.构建的binutils


cd ~/arm-none-eabi-src/build
mkdir binutils-2.22
cd binutils-2.22
../../src/binutils-2.22/configure \
  --target=arm-none-eabi \
  --prefix=$HOME/arm-none-eabi \
  --with-cpu=cortex-m3 \
  --with-no-thumb-interwork \
  --with-mode=thumb
make all install
export PATH="$PATH:$HOME/arm-none-eabi/bin"

5.构建GCC(第1部分)


cd ~/arm-none-eabi-src/build
mkdir gcc-4.7.1
cd gcc-4.7.1
../../src/gcc-4.7.1/configure --target=arm-none-eabi \
  --prefix=$HOME/arm-none-eabi --with-cpu=cortex-m3 \
  --with-mode=thumb --disable-multilib \
  --with-no-thumb-interwork \
  --enable-languages="c,c++" --with-newlib \
  --with-headers=../../src/newlib-1.20.0/newlib/libc/include
make all-gcc install-gcc

所述--enable-CXX-标志配置选项可能被附加地用来控制的libstdc ++(包含在此步骤)的构建国旗:

--enable-cxx-flags='-fno-exceptions \
    -ffunction-sections -fno-omit-frame-pointer'

一般来说相同的C ++编译标志应作为建设预定目标代码时,他们就会出现。


6.构建GCC newlib与交叉编译器(第2部分)


cd ~/arm-none-eabi-src/build
mkdir newlib-1.20.0
cd newlib-1.20.0
../../src/newlib-1.20.0/configure --target=arm-none-eabi \
  --prefix=$HOME/arm-none-eabi --disable-multilib \
  --disable-newlib-supplied-syscalls
make all install

有关的注意事项--disable-newlib-supplied-syscalls选项:
禁用默认newlib系统调用存根实现通常是一个好主意,当你打算编译的目标,而无需使用类似操作系统或无操作系统在所有Linux的。 这将让你与未实现存根功能,您需要提供newlib链接错误。 删除选项将仍然允许你用自己的实现覆盖newlib提供的存根。

不过,当你打算使用交叉工具链与CMake的结合,你应该忽略此选项。 CMake的不使用指定的编译器定义一些基本的测试(例如,从toolchain.cmake文件),这会失败,且不提供的默认存根实现。


7.完成安装GCC


cd ~/arm-none-eabi-src/build/gcc-4.7.1
make all install

8.生成GDB


cd ~/arm-none-eabi-src/build
mkdir gdb-7.4
cd gdb-7.4
../../src/gdb-7.4/configure --target=arm-none-eabi \
  --prefix=$HOME/arm-none-eabi
make all install

UPDATE
同样的作品相当不错GCC 4.8.2也。



文章来源: Can I build gcc for ARM with an X64 one?
标签: c++ c gcc gnu