如何在X86 PC上编译arm的gcc编译器

时间:2017-06-03 03:49:37

标签: c++ c gcc arm

我正在使用zedboard,我知道如果我想为ARM设备编译程序,我需要一个特殊版本的gcc,它运行在x86下并编译为ARM(交叉编译),我想知道是否有可能从x86上的源代码编译gcc(将在ARM上使用),以及如何,我不知道如何配置它。

6 个答案:

答案 0 :(得分:2)

我建议使用交叉编译器二进制文件。在Linux发行版上,它通常已经打包。

但是,如果您坚持从源代码构建GCC(但要注意依赖关系),请阅读Installing GCCConfiguring GCC。您应该在源树的外部构建它,并且您希望传递一些特定的--target=选项。我还推荐像--program-suffix=_my

这样的东西

(我不知道--target与您的特定配置和电路板有什么关系;您需要找出答案)

请注意,目标不仅是CPU,还是操作系统....

答案 1 :(得分:2)

这是一项艰巨但可行的任务。

这取决于您要编译的ARM系列。 在许多系统上,您都可以找到运行“迷你Linux发行版”的Cortex-A(armv7-a或更高版本)或ARM11(armv6)处理器,许多POS(销售点)设备就是这种情况。在这种情况下,您的目标可以是以下之一:

  • arm-linux-gnueabi
  • arm-linux-gnueabihf

其中 hf 表示硬浮点,这意味着CPU具有FPU(浮点单元),所有Cortex-A都支持该功能,但也取决于底层OS。了解嵌入式Linux上glibc的版本也非常重要,因为如果编译器和OS之间的版本不相同,则可能会发生意外行为。

如果要针对不带MMU(内存磁单元)的ARM处理器(例如Cortex-R或Cortex-M系列)进行编译,并且因此不支持Linux(仅像FreeRTOS这样的微内核),您的目标将是(也称为作为裸机):

  • arm-none-eabi

ARM现在分发GCC的二进制文件:

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

以前是Linaro。但是,如果需要,他们会保留GCC 7.x的arm-linu-gnueabi(软浮标)。

https://releases.linaro.org/components/toolchain/binaries/latest-7/

Linaro还使用了一个称为ABE的构建系统,我没有找到太多文档,但是他们使用它来配置和构建由他们分发的工具链。

如果以上方法都不适合您,您仍然可以构建自己的工具链,对于该任务,我建议使用crosstool-ng: https://crosstool-ng.github.io/

在像Ubuntu这样的Linux操作系统上效果最佳(您仍然可以尝试使用Cygwin在Windows上构建它,但是可能需要更多时间)。请注意,您不需要在要运行它的计算机中对其进行编译,这意味着您可以在Ubuntu上编译将在Windows上运行的GCC,该GCC可以生成在ARM处理器上运行的程序,这就是加拿大交叉。 / p>

答案 2 :(得分:1)

您只需要一个交叉编译器。您在x86机器中安装交叉编译器,它将为arm生成机器代码。我建议使用GNU arm embedded toolchain

之后你完全可以编译其他c / c ++代码,除了你做arm-none-eabi-gcc(或g ++)而不只是gcc或g ++

请注意,如果您正在使用裸机,因为像printf()这样的函数可能无法在没有额外工作的情况下工作。

答案 3 :(得分:0)

我认为你可以获得arm的交叉编译工具链。比如arm-linux-gcc,arm-linux-g ++等等。通常,工具链是臂装置的附加产品。如果要在arm的应用程序中使用共享库(libxxx.so),可以使用交叉编译工具链和库的源代码来构建这些库。例如,图书馆的建设步骤如下:

//step 1: configure the cross compilation toolchain in PC. If the 
//command line "arm-linux-gcc -v" can implemented in your PC(linux os) , which means the environment is right.
//step 2: get the open source of the library and decompress
tar -zxvf  jpegsrc.v6b.tar.gz
//./configure --host=arm-linux  --prefix=/your/install/directory
// make && make install

你可以获得手臂库。我希望能帮到你!

答案 4 :(得分:0)

有两个解决方案。首先是交叉编译二进制文件,然后将其复制过来。喜欢:

sudo apt-get install gcc-arm-linux-gnueabi
vi helloworld.c
arm-linux-gnueabi-gcc -o helloworld helloworld.c

然后通过ftp结束。

另一个是交叉编译整个gcc工具链并将其复制过来。我建议先做第一个。特别是由于initrd只有8MB并且扩展它很麻烦,试图将整个操作系统安装到sd卡上也是有问题的。您必须编译比特流,这似乎需要2000磅版本的vivado。

答案 5 :(得分:0)

您可以在x86上使用以下命令:

对于ARM 32b:

arm-linux-gnueabi-gcc

对于ARM 64b:

aarch64-linux-gnu-gcc