交叉编译为ARM与Autoconf配合(Cross-compiling for ARM with A

2019-07-21 01:58发布

我在使用autconf麻烦交叉编译库为我的胳膊板。

我用这行:

./configure --target=arm-linux --host=arm-linux --prefix=/bla/bla/bla/linux_arm_tool CFLAGS='-m32'
make
make install

当我做file来检查它,我得到:

libjpeg.so.8.4.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

这看起来不正确所有,但无论如何我尝试了使用它......我得到:

/usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /bla/bla/bla/bla/../linux_arm_tool/lib/libjpeg.so when searching for -ljpeg

我不知所措,我一直在谷歌上搜索了一个小时,现在...

Answer 1:

所以,我知道我已经交叉编译使用非常基本的方法调用之前,我想通了,为什么我检查后输出前侥幸这样的:

checking for arm-linux-gnueabi-gcc... no
checking for gcc... gcc
...
...
checking for arm-linux-gnueabi-gcc... gcc

在我/usr/bin没有arm-linux-gnueabi-gcc ,我必须:

ln -s /usr/bin/arm-linux-gnueabi-gcc-4.5 /usr/bin/arm-linux-gnueabi-gcc

我成功地使用交叉编译:

./configure --host=arm-linux-gnueabi -prefix=${CSTOOL_DIR}/linux_arm_tool

作为联......我还是要检查一些东西,但我会认为我可能需要抛出一些-rpath-link标志在更先进的编译。



Answer 2:

我认为这个问题可以更一般地重申:“我如何使用Autoconf的交叉编译为ARM”

根据./configure -h

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

官方的GNU文档是回答这个问题有所帮助:

http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Hosts-and-Cross_002dCompilation.html

请注意,当他们定义的使用--host和和--build

Therefore, whenever you specify --host, be sure to specify --build too.

这里是我刚刚用于配置为例iperf为我的嵌入式ARM平台:

首先所有的“的./configure”脚本实际上是所谓的‘Autoconf的’,这确实有助于为谷歌-ING。 这里的想法是:

  • 让你的交叉编译器在你的当前$ PATH
  • 设置CC和CXX环境变​​量指向的交叉编译器
  • 给出正确的host以及--build

     buildpath <--- my little script to setup my $PATH export CC=arm_v5t_le-gcc export CXX=arm_v5t_le-g++ ./configure --host=armv5tl-montavista-linux-gnueabi --build=x86_64-linux-gnu 


Answer 3:

你需要重写的环境变量CC,LD,以及其他相关的人。 设置这些开关没有告诉配置您的交叉工具链(它可以在任何地方)

检查出各种项目一些导游,比如: http://wiki.wxwidgets.org/Cross-Compiling_Under_Linux

另外,这里是我设置交叉做编译node.js的脚本-同样的想法: https://gist.github.com/edhemphill/5094239

该版本的libjpeg不会B / C它是一个二进制的x86,你需要它说的工作:

 ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped

或类似。

这是你得到一个理由skipping incompatible



Answer 4:

 # Install arm-linux-gnueabi packages apt-get install libc6-armel-cross libc6-dev-armel-cross \ binutils-arm-linux-gnueabi arm-linux-gnueabi-gcc libncurses5-dev ./configure --target=arm-linux-gnueabi --host=arm-linux-gnueabi ... checking for arm-linux-gnueabi-gcc... arm-linux-gnueabi-gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... yes checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether arm-linux-gnueabi-gcc accepts -g... yes checking for arm-linux-gnueabi-gcc option to accept ISO C89... none needed checking whether arm-linux-gnueabi-gcc understands -c and -o together... yes checking whether make supports the include directive... yes (GNU style) checking dependency style of arm-linux-gnueabi-gcc... gcc3 ... make arm-linux-gnueabi-gcc -DPACKAGE_NAME=\"Tutorial\ Program\" -DPACKAGE_TARNAME=\"tutorial-program\" -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"Tutorial\ Program\ 1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"tutorial-program\" -DVERSION=\"1.0\" -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c 



文章来源: Cross-compiling for ARM with Autoconf