【问题标题】:How to Force compiler in autotools with Eclipse如何使用 Eclipse 在自动工具中强制编译器
【发布时间】:2013-01-31 14:35:04
【问题描述】:

我从 Internet 下载了一些 C++ 源代码项目,其中包含自动工具功能。所以,我想为我有编译器的arm设备交叉编译它;但是,我不知道如何在 autotools 参数上指示 arm 编译器,我尝试使用 CC=pathOfArmCompiler 在配置选项上设置编译器的路径,但它不起作用。

你有什么建议吗?我正在阅读更改 configure.ac 存档,但我不确定这是否是更好的解决方案。

提前致谢,

问候

编辑:

我已经尝试过 Jack Kelly 的建议,使用以下配置

configure CC=/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-gcc CXX=/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-g++  CFLAGS="-m32" LDFLAGS="-m32"--host=arm-mv5sft-linux-gnueabi --with-sysroot=/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/arm-mv5sft-linux-gnueabi/

我收到此错误

Command-line environment variables:
     LDFLAGS="-m32" LDFLAGS="-m32" CC="/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-gcc" CXX="/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-g++"

sh -c /home/t/ibrdtn/ibrdtn-tools-0.8.0/configure      ++ --host=arm-mv5sft-linux-gnueabi --with-sysroot=/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/arm-mv5sft-linux-gnueabi/ 
configure: WARNING: you should use --build, --host, --target
configure: WARNING: invalid host type: ++
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-mv5sft-linux-gnueabi-strip... no
checking for arm-mv5sft-linux-gnueabi-strip... no
checking for strip... strip
configure: WARNING: using cross tools not prefixed with host triplet
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
Invalid configuration `++': machine `++' not recognized
configure: error: /bin/bash ./config.sub ++ failed
configure: error: /bin/bash ./config.sub ++ failed
checking build system type... 

Configuration failed with error

编辑 2: 重新安装 eclipse 后,以前的错误就消失了。但是现在有了这个配置

./configure --build=i686-linux --host=arm-mv5sft-linux-gnueabi
--target=arm-mv5sft-linux-gnueabi
CC=/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-gcc
CXX=/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-g++
--with-gnu-ld--with-sysroot=/h/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/arm-mv5sft-linux-gnueabi
CFLAGS="-m32" LDFLAGS="-m32" --prefix=/ibrdtn-svn/dtnCross/

检查配置输出我得到了这个

checking for arm-mv5sft-linux-gnueabi-g++... no
checking for arm-mv5sft-linux-gnueabi-c++... no
checking for arm-mv5sft-linux-gnueabi-gpp... no
checking for arm-mv5sft-linux-gnueabi-aCC... no
checking for arm-mv5sft-linux-gnueabi-CC... no
checking for arm-mv5sft-linux-gnueabi-cxx... no
checking for arm-mv5sft-linux-gnueabi-cc++... no
checking for arm-mv5sft-linux-gnueabi-cl.exe... no
checking for arm-mv5sft-linux-gnueabi-FCC... no
checking for arm-mv5sft-linux-gnueabi-KCC... no
checking for arm-mv5sft-linux-gnueabi-RCC... no
checking for arm-mv5sft-linux-gnueabi-xlC_r... no
checking for arm-mv5sft-linux-gnueabi-xlC... no

...

make[3]: Entering directory `/home/t/ibrdtn/ibrcommon-0.8.0/ibrcommon/net'
  CXX    tcpclient.lo
  CXX    tcpserver.lo
  CXX    tcpstream.lo
  CXX    udpsocket.lo
  CXX    MulticastSocket.lo
  CXX    UnicastSocket.lo
  CXX    stopandwait.lo
  CXX    vsocket.lo
  CXX    vinterface.lo
  CXX    vaddress.lo
  CXX    LinkManager.lo
In file included from LinkManager.cpp:16:
../../ibrcommon/net/NetLinkManager.h:19:29: error: netlink/netlink.h: No such file or directory
../../ibrcommon/net/NetLinkManager.h:20:26: error: netlink/attr.h: No such file or directory
make[3]: *** [LinkManager.lo] Error 1
make[3]: Leaving directory `/home/t/ibrdtn/ibrcommon-0.8.0/ibrcommon/net'
make[2]: Leaving directory `/home/t/ibrdtn/ibrcommon-0.8.0/ibrcommon'
make[2]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/t/ibrdtn/ibrcommon-0.8.0/ibrcommon'
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1

**** Build Finished ****

所以我认为编译器没有正确咳嗽,你知道可能的原因吗?

提前致谢,

【问题讨论】:

  • arm编译器的路径是什么,编译器叫什么?
  • arm编译器的路径类似于code /home/t/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-gcc autotools中默认调用的编译器是gcc还是g++,因为宏是code AC_PROG_CC AC_PROG_CXX

标签: eclipse autotools


【解决方案1】:

在交叉编译自动工具包时,您需要考虑 configure 的三个选项:--host--build--target

  • --host: 二进制文件将在什么平台上运行?
  • --build: 什么平台在编译?
  • --target: 编译编译器的时候,应该针对什么平台?

(是的,这意味着可以使用 sparc 机器编译在 x86 上运行但以 ARM 为目标的编译器。这被称为加拿大十字。)

这些选项的参数采用(一般)形式ARCH-VENDOR-OS-LIBC,但有时会省略一个或多个部分。一些例子:

  • i686-pc-linux-gnu
  • i586-pc-mingw32
  • arm-mv5sft-linux-gnueabi

这些用作被调用的任何工具的前缀(编译器、链接器、arAC_CHECK_TOOLconfigure 脚本中找到的任何东西)。

所以--host 的参数是arm-mv5sft-linux-gnueabi,但是--build 呢?

好吧,configure 经常可以猜到(通过调用名为 config.guess 的辅助脚本),所以试试下面的:

./configure \
   --host=arm-mv5sft-linux-gnueabi \
    PATH="/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2pi/bin:$PATH"

【讨论】:

  • 感谢 Jack Kelly,我会尝试并发布结果。但是我仍然有疑问,对于 Eclipse 的 Autotools 插件,提供配置的行不应该包括 --host 因为该参数已经在插件中单独指定,我应该吗?那么配置命令就像code ./configure PATH="/home/t/s/arm-mv5sft-linux-gnueabi/SW3.2pi/bin:$PATH"
  • 我不知道eclipse,也不知道eclipse的autotools插件。我所知道的是,如果您不将--host 传递给./configure,它就不会知道您正在交叉编译。所以它运行的一些小测试(通过编译和运行小程序)可能会失败。
  • 再次感谢,但我可以像这样将标志 CC 设置为编译器路径,而不是更改路径,codeCC=/home/th/s/arm-mv5sft-linux-gnueabi/SW3.2p1/bin/arm-mv5sft-linux-gnueabi-gcc CC=c99
  • 你可以试试,但是你为什么要把CC设置为编译器的路径和“c99”呢?此外,您仍然需要设置--host,使其处于交叉编译模式。
  • 我犯了一个错误,我只想使用编译器的路径而不是 c99,抱歉。但是现在当我这样做时,我得到了一些我在原始帖子中包含的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多