我正在尝试构建一个gcc
4.6,它“恰好”可以在带有 DSM 5.1 的 Synology DS214 上运行(Synology OS 实际上是过时的 Linux 3.2.x),ie 允许我在机器上编译应用程序。我在使用以下两个交叉编译的 gcc 中遇到了同样的问题:
env CC=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-gcc \
LD=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-ld \
RANLIB=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-ranlib \
AR=/usr/local/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi-ar \
CFLAGS=" -I/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc/include -mhard-float -mfpu=vfpv3-d16" \
LDFLAGS=" -L/usr/local/arm-marvell-linux-gnueabi/arm-marvell-linux-gnueabi/libc/lib" \
auto-apt run ./configure --host=arm-marvell-linux --target=arm-marvell-linux \
--prefix=$USER/syno-prefix --disable-shared --enable-obsolete
make
make install
与Synology 工具链armadaxp
在 Ubuntu 14.10 amd64 上以及CPU的推荐参数和crosstools-ng
(项目现场) 工具链与eglibc
2.18、4.6.4 gcc
、linux3.2.40
和architecture-level
sarmv7-a
和armadaxp
(后者不起作用,错误“未知 arch”)和 CPU 调整cortex-a9
,CFLAGS
-mhard-float -mfpu=vfpv3-d16"
因为经过数小时的搜索,关于必要架构参数的唯一提示是如何在带有 armv7l 的 MyCloud 设备上编译传输的指南。
交叉编译gcc
和工具链都会导致错误
/usr/local/bin/ld: unrecognised emulation mode: armelf_linux_eabi
Supported emulations: armelf_linux armelf armelfb armelfb_linux
collect2: ld returned 1 exit status
(在 中config.log
)在编译例如binutils
2.24 和trafficserver
5.1.0 时(LDFLAGS=" -marmelf_linux"
在 configure 之前添加会导致cc1: error: unrecognized command line option '-marmelf_linux'
)。错误似乎是系统性的。如何开始找出一般工具链参数和特定于指定设备的硬件特定参数?
gcc
关于应该运行的目标的一些信息:
# cat /proc/cpuinfo
Processor : Marvell PJ4Bv7 Processor rev 2 (v7l)
processor : 0
BogoMIPS : 1064.96
processor : 1
BogoMIPS : 1064.96
Features : swp half thumb fastmult vfp edsp vfpv3 tls
CPU implementer : 0x56
CPU architecture: 7
CPU variant : 0x2
CPU part : 0x584
CPU revision : 2
Hardware : Marvell Armada XP Development Board
Revision : 0000
Serial : 0000000000000000
我尝试从阅读有关 ARM 和浮点单元的资料(主要是维基百科)开始,但为了猜测哪些参数是必要的,对于初学者来说需要花费很多时间。
编辑1:我刚刚发现将选项设置Toolchain type
为Canadian
而不是会更好Cross
,但我仍然crosstools-ng
需要machine
设置选项(出现错误Invalid configuration `': machine `' not recognized
),这让我回到了缺乏有关 CPU 和架构细节知识的问题——当然没有办法弄清楚“机器”实际上指的是什么……