C++ Linaro工具链无法创建ARMv5二进制文件

C++ Linaro工具链无法创建ARMv5二进制文件,c++,c++11,arm,toolchain,linaro,C++,C++11,Arm,Toolchain,Linaro,我正在尝试升级我的编译器以支持C++11,我的目标机器的内核是2.6.33.20 为此,我尝试在使用预构建的二进制文件,即版本5.5.0 琐碎的测试程序 //#include <functional> #include <stdio.h> int main(void) { // auto lambda = [](int value) { printf("Wert: %d\n", value); }; // lambda(20); prin

我正在尝试升级我的编译器以支持C++11,我的目标机器的内核是2.6.33.20

为此,我尝试在使用预构建的二进制文件,即版本5.5.0

琐碎的测试程序

//#include <functional>
#include <stdio.h>

int main(void)
{
//  auto lambda = [](int value) { printf("Wert: %d\n", value); };
//  lambda(20);
    printf("My output\n");
    return 0;
}
鉴于新编译器生成的新编译器产生:

Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-A"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Anwendung
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_rounding: Needed
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-Byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_CPU_unaligned_access: v6
接下来,我在上述命令中添加了标志
-mcpu=arm10tdmi
(结果是
arm-linux-gnueabi-g++-mcpu=arm10tdmi-o test main.cpp
),但是readelf的输出仍然保持不变。 使用ARM标志可以得到完全相同的结果

这表明编译器忽略了体系结构标志(或者可能不支持为ARM5构建),而坚持为ARM7构建

我也尝试过工具链4.9,但效果相同

附带说明:Ubuntu 14.04附带的arm-linux-gnueabi-g++已知可以工作(支持C++11),但是我似乎找不到一种方法将它打包到一个文件夹中,作为可转移的工具链使用

编辑:根据旧计时器的输入,我已使用命令
arm-linux-gnueabi-g++-mcpu=arm10tdmi main.cpp-c将编译重定向到一个对象文件(main.o)

在生成的对象文件上运行
readelf-A
,将产生以下输出:

Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "ARM10TDMI"
  Tag_CPU_arch: v5T
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-Byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_optimization_goals: Aggressive Debug
但是,当我尝试使用arm-linux-gnueabi-g++-mcpu=arm10tdmi main.o-o test从这个文件创建一个实际的可执行文件时,readelf输出返回到我上面发布的ARMv7输出


这表明,编译器本身理解并使用-mcpu开关,但链接器随后继续操作并将其转换为ARMv7二进制文件。

这是一个很好的答案,老定时器给了我一个关于去哪里的宝贵提示

最后我所要做的就是mosey过来,下载软件包,翻找依赖项,然后让它变魔术


我选择了最低配置,编译器版本5.5.0,尽管我担心内核版本2.6.33.20不可用,但在将目标体系结构添加到命令行调用后,二进制文件就可以工作了。

您尝试运行调试器了吗?@JHBonarius没有,还没有。只是可执行文件。嵌入式计算机只有gdbserver可用,因此“本地调试”很困难。如果你想使用ubuntu 14.04编译器,可能最容易在其中运行docker@AlanBirtles如果我有一个工具链文件夹,我会很满意,但是如果其他的都失败了,我当然会考虑你的建议。谢谢。你做了某种形式的“清理”来清理之前生成的所有对象,以便使用新的命令行选项生成它们?
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "ARM10TDMI"
  Tag_CPU_arch: v5T
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-Byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_optimization_goals: Aggressive Debug