Arm 交叉编译coreutils

Arm 交叉编译coreutils,arm,cross-platform,gnu-coreutils,Arm,Cross Platform,Gnu Coreutils,我在为ARM交叉编译GNUCoreutils(git克隆)时遇到了问题 在StackExchange网络中的其他问答之后,我完成了以下步骤: 设置: git clone https://git.savannah.gnu.org/git/coreutils.git cd coreutils/ && ./bootstrap [...] 交叉汇编: export CC=/path/to/toolchain/arm-linux-gnueabihf-gcc export CXX=/pat

我在为ARM交叉编译GNUCoreutils(git克隆)时遇到了问题

在StackExchange网络中的其他问答之后,我完成了以下步骤:

设置:

git clone https://git.savannah.gnu.org/git/coreutils.git
cd coreutils/ && ./bootstrap
[...]
交叉汇编:

export CC=/path/to/toolchain/arm-linux-gnueabihf-gcc
export CXX=/path/to/toolchain/arm-linux-gnueabihf-g++
汇编:

./configure --host=arm-linux-gnueabihf
[...]
make
  GEN      .version
[...]
  GEN      lib/wchar.h
  GEN      lib/wctype.h
  GEN      src/coreutils.h
  GEN      src/dircolors.h
make src/make-prime-list
make[1]: Entering directory '/media/data/sources/coreutils'
  CC       src/make-prime-list.o
  CCLD     src/make-prime-list
make[1]: Leaving directory '/media/data/sources/coreutils'
  GEN      src/primes.h
/bin/bash: src/make-prime-list: cannot execute binary file: Exec format error
Makefile:14603: recipe for target 'src/primes.h' failed
make: *** [src/primes.h] Error 126
你没有编译吗? 我看到它试图在我的x64机器上运行此
生成基本列表
,因此出现了格式错误。但无论如何,它应该用工具链编译


有什么建议吗?

要交叉编译,您应该只将
--host
选项指定为
/configure
,不能将交叉编译器指定为
CC
CXX
configure
脚本应该做正确的事情,对主机二进制文件使用主机编译器,如
makeprime list
,对目标二进制文件使用交叉编译器

但是它似乎没有,因此无法生成
src/primes.h
。但是,该文件似乎不是特定于arch的,而且
makeclean
不会删除它,因此以下内容对我很有用:

./configure && make
为构建架构构建
makeprime列表
,并使用该列表生成
src/primes.h
,然后

make clean && ./configure --host=arm-linux-gnueabihf && make

要交叉编译目标二进制文件。

要交叉编译,只需将
--host
选项指定为
/configure
,不能将交叉编译器指定为
CC
CXX
configure
脚本应该做正确的事情,对主机二进制文件使用主机编译器,如
makeprime list
,对目标二进制文件使用交叉编译器

但是它似乎没有,因此无法生成
src/primes.h
。但是,该文件似乎不是特定于arch的,而且
makeclean
不会删除它,因此以下内容对我很有用:

./configure && make
为构建架构构建
makeprime列表
,并使用该列表生成
src/primes.h
,然后

make clean && ./configure --host=arm-linux-gnueabihf && make

交叉编译目标二进制文件。

太好了,谢谢Stephen。这解决了
makeprime list
的问题,但是我无法让它编译链接器错误,“在静态链接的应用程序中使用“”需要在运行时使用glibc版本中用于链接的共享库”。您得到的错误是“多重定义
\uuu mktime\u internal
”;您上面引用的库警告只是一个警告。
mktime
错误看起来像是工具链的问题;我正在使用Debian 9中的Debian交叉编译器(
apt install gcc arm linux gnueabihf
)。太好了,谢谢Stephen。这解决了
makeprime list
的问题,但是我无法让它编译链接器错误,“在静态链接的应用程序中使用“”需要在运行时使用glibc版本中用于链接的共享库”。您得到的错误是“多重定义
\uuu mktime\u internal
”;您上面引用的库警告只是一个警告。
mktime
错误看起来像是工具链的问题;我正在使用Debian 9中的Debian交叉编译器(
apt install gcc arm linux gnueabihf
)。