C++ Linaro工具链无法创建ARMv5二进制文件
我正在尝试升级我的编译器以支持C++11,我的目标机器的内核是2.6.33.20 为此,我尝试在使用预构建的二进制文件,即版本5.5.0 琐碎的测试程序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
//#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