Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在Mac OS X上进行ARM交叉编译(错误:无效的列表选项'r';-交叉编译错误)_Macos_Gcc_Arm_Cross Compiling - Fatal编程技术网

Macos 如何在Mac OS X上进行ARM交叉编译(错误:无效的列表选项'r';-交叉编译错误)

Macos 如何在Mac OS X上进行ARM交叉编译(错误:无效的列表选项'r';-交叉编译错误),macos,gcc,arm,cross-compiling,Macos,Gcc,Arm,Cross Compiling,我正试图在Mac OS X上构建一个gcc交叉编译器,目标是arm elf eabi 这就是我到目前为止所做的: 安装gcc和环境设置 我尽量不使用Mac上的clang/llvm,所以我使用了brew中的gcc-4.8 brew tap homebrew/versions brew install gcc48 brew install binutils 在构建之前,我设置了环境变量: export CC=/usr/local/bin/gcc-4.8 export CXX=/usr/local

我正试图在Mac OS X上构建一个gcc交叉编译器,目标是
arm elf eabi

这就是我到目前为止所做的:

安装gcc和环境设置 我尽量不使用Mac上的clang/llvm,所以我使用了brew中的gcc-4.8

brew tap homebrew/versions 
brew install gcc48
brew install binutils
在构建之前,我设置了环境变量:

export CC=/usr/local/bin/gcc-4.8
export CXX=/usr/local/bin/g++-4.8
export CPP=/usr/local/bin/cpp-4.8
export LD=/usr/local/bin/gcc-4.8
export PREFIX=/opt/cross
export TARGET=arm-elf-eabi
构建binutils 下载binutils源,然后创建生成目录,可以无问题地生成binutils:

mkdir build-binutils
cd build-binutils
../binutils-2.24/configure --target=$TARGET --prefix=$PREFIX --with-sysroot --enable-64-bit-bfd --disable-shared --disable-werror --disable-nls
make configure-host
make LDFLAGS="-all-static"
sudo make install
建筑gcc 下载GCC4.8源代码,并运行构建过程

mkdir build-gcc
cd build-gcc
../gcc-4.8.3/configure --target=$TARGET --prefix=$PREFIX --disable-nls --enable-languages=c,c++ --without-headers --disable-shared --enable-multilib --with-sysroot --disable-werror
make configure-host
make all-gcc << ERROR
make all-target-libgcc
替代建筑工艺 我尝试使用Mac的默认编译器进行以下配置:

./contrib/download_prerequisites
CFLAGS="-arch i386 -arch x86_64 -Wno-error=deprecated-declarations -Wno-error=unused-variable -Wno-error=unused-function" ../gcc-4.8.3/configure --target=$TARGET --prefix=$PREFIX --disable-nls --enable-languages=c --without-headers --disable-shared --enable-multilib
然后,它在
makeall-gcc
中运行良好,但在
makeall-target-libgcc
中也有不同的错误,因此我将坚持使用gcc方法,而不是clang/llvm方法

我的猜测是,来自苹果的汇编程序
as
与gcc提供的参数有一些问题(因为clang/llvm没有任何问题)


可能有什么问题?如何解决此问题?

在目录
build gcc/gcc
中,存在一个
as
脚本文件,需要调用它,而不是
/usr/bin/as
。当我将
重命名为
并重新运行时,一切正常。
环境变量
AS=/usr/bin/AS
似乎无法解决此问题

我需要再做一次修改,即创建
/opt/cross/arm elf eabi/sys root/usr/include
,以防止出现另一条错误消息


我还发现这在Mac OS X上的交叉编译中非常有用。

这就是我在Mac OS X上进行交叉编译并执行qemu检查其是否工作的方法

汇编 只需遵循以下说明-

检查是否所有二进制文件都可用

预编译程序
  • qemu模拟
源代码 构建脚本 执行 启动qemu

qemu-system-arm -M connex -pflash flash.bin -gdb tcp::1234 -S
执行调试器

arm-none-eabi-gdb add.elf
在调试器内部启动连接

target remote :1234
您可以使用
n
逐个执行该行

(gdb) target remote :1234
Remote debugging using :1234
entry () at add.S:2
2   entry: b start
(gdb) n
7       ldr r0, =eoa
(gdb) n
8       ldr r1, =arr
(gdb) n
9       mov r3, #0
(gdb) n
11      ldrb r2, [r1], #1
(gdb) n
12      add r3, r2, r3
(gdb) n
13      cmp r1, r0
(gdb) n
14      bne loop
(gdb) n
11      ldrb r2, [r1], #1
(gdb) n
12      add r3, r2, r3
工具书类
    • --gstabs+
      是要使用的标志

有一个预先配置的交叉编译器,它的名称是Linaro,您可以从。 如果您需要,这里有一个指南,告诉您如何安装它并使用它进行编译。 例如,对于.c文件:

${PREFIX}gcc -Wall -Wextra -Os -ffreestanding -mcpu=cortex-a8 -march=armv7-a -mfpu=neon -marm -c filename.c 
其中Prefix表示安装工具的目录。

安装,然后:

brew cask install gcc-arm-embedded
target remote :1234
(gdb) target remote :1234
Remote debugging using :1234
entry () at add.S:2
2   entry: b start
(gdb) n
7       ldr r0, =eoa
(gdb) n
8       ldr r1, =arr
(gdb) n
9       mov r3, #0
(gdb) n
11      ldrb r2, [r1], #1
(gdb) n
12      add r3, r2, r3
(gdb) n
13      cmp r1, r0
(gdb) n
14      bne loop
(gdb) n
11      ldrb r2, [r1], #1
(gdb) n
12      add r3, r2, r3
${PREFIX}gcc -Wall -Wextra -Os -ffreestanding -mcpu=cortex-a8 -march=armv7-a -mfpu=neon -marm -c filename.c 
brew cask install gcc-arm-embedded