使用 -mfloat-abi=hard 和 -mfpu=vfp/neon Codesourcery Lite 2013.05-24

Posted

技术标签:

【中文标题】使用 -mfloat-abi=hard 和 -mfpu=vfp/neon Codesourcery Lite 2013.05-24【英文标题】:Making use of -mfloat-abi=hard and -mfpu=vfp/neon Codesourcery Lite 2013.05-24 【发布时间】:2013-06-28 12:23:52 【问题描述】:

为了使用 vfp 或 neon,我在交叉编译中添加了 -mfpu=vfp 和 -mfloat-abi=hard。该程序是一个非常简单的 hellofloat.cpp,然后不再使用 Sourcery CodeBench Lite 2013.05-24 进行编译。

#include <string>
#include <iostream>
using namespace std;
int main()

    double val=1.04;
    cout << "Hello Float: " << val  << endl;

编译说明:

arm-none-linux-gnueabi-g++ -o armhf-main main.cpp  -march=armv7-a  -mfloat-abi=hard -mfpu=neon

我很困惑,因为 Codesorcery 应该支持 armhf 编译?

错误:

In file included from /home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/usr/include/features.h:399:0,
                 from /home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.3/../../../../arm-none-linux-gnueabi/include/c++/4.7.3/arm-none-linux-gnueabi/bits/os_defines.h:40,
                 from /home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.3/../../../../arm-none-linux-gnueabi/include/c++/4.7.3/arm-none-linux-gnueabi/bits/c++config.h:414,
                 from /home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.3/../../../../arm-none-linux-gnueabi/include/c++/4.7.3/string:40,
                 from main.cpp:1:
/home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/usr/include/gnu/stubs.h:10:29: fatal error: gnu/stubs-hard.h: No such file or directory
compilation terminated.

编译器

arm-none-linux-gnueabi-g++ -v
Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-g++
COLLECT_LTO_WRAPPER=/home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../libexec/gcc/arm-none-linux-gnueabi/4.7.3/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/jbrown/2013.05-arm-linux-release/src/gcc-4.7-2013.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%save-temps: -fverbose-asm %funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables -D__CS_SOURCERYGXX_MAJ__=2013 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=24 %O2:%!fno-remove-local-statics: -fremove-local-statics %O*:%O|O0|O1|O2|Os:;:%!fno-remove-local-statics: -fremove-local-statics' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2013.05-24' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/jbrown/2013.05-arm-linux-release/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/jbrown/2013.05-arm-linux-release/obj/pkg-2013.05-24-arm-none-linux-gnueabi/arm-2013.05-24-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/jbrown/2013.05-arm-linux-release/obj/pkg-2013.05-24-arm-none-linux-gnueabi/arm-2013.05-24-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/jbrown/2013.05-arm-linux-release/obj/pkg-2013.05-24-arm-none-linux-gnueabi/arm-2013.05-24-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-ppl=/scratch/jbrown/2013.05-arm-linux-release/obj/pkg-2013.05-24-arm-none-linux-gnueabi/arm-2013.05-24-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/jbrown/2013.05-arm-linux-release/obj/pkg-2013.05-24-arm-none-linux-gnueabi/arm-2013.05-24-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-libelf=/scratch/jbrown/2013.05-arm-linux-release/obj/pkg-2013.05-24-arm-none-linux-gnueabi/arm-2013.05-24-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-poison-system-directories --with-build-time-tools=/scratch/jbrown/2013.05-arm-linux-release/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/jbrown/2013.05-arm-linux-release/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.7.3 (Sourcery CodeBench Lite 2013.05-24) 

【问题讨论】:

wiki.debian.org/ArmHardFloatPort 和 wiki.debian.org/ArmHardFloatPort/VfpComparison 你能用softfp 或任何其他简单的测试应用程序编译吗?看起来像一个工具链问题。 尝试arm-none-linux-gnueabi-g++ -v 并发布输出。 除非您链接到使用 -mfloat-abi=hard 构建的 libstdc++,否则您将链接两个不兼容的 ABI。破碎是意料之中的。 @auselen 对不起,直到星期一我才能访问董事会,我将发布 -v 输出。 softfp 有效,因为它应该与不使用 mfloat-abi 选项相同 【参考方案1】:

Sourcery CodeBench Lite 工具链支持 armhf。学术版或个人版也不行。

您需要购买标准版或专业版才能获得。

另外,我相信 Ubuntu 的交叉编译器包支持您需要的配置(实际上,该配置)。

如果您不使用 Ubuntu,那么 pre-built Linaro toolchains 应该正是您所需要的。 (Ubuntu 交叉编译器包也是由 Linaro 人构建的,尽管使用的是 Debian/Ubuntu 特定的 deb 构建系统。)

【讨论】:

您也可以自己构建。请参阅crosstool-ng,它是用于构建交叉编译器的脚本集合。这比 自己动手 稍微容易一些,并且通常允许在您了解它的工作原理后创建更适合您的硬件的编译器。 Linaro 是另一个好建议。 UbuntuLinaro 都使用 crosstool-ng 脚本。 @artlessnoise:确实,我忘记了全世界都不使用 Ubuntu。 Linaro 工具完全相同,但安装范围更广。 很遗憾 ARM 停止赞助 CodeSourcery 工具,但不难看出为什么有了 Linaro。 那么您知道 Xilinx 编译器是否支持 armhf?他们添加了 Codesorcery 编译器并将其作为 arm-xilinx-linux-gnueabi 添加到 ISE 套件中? 我相信 Xilinx 工具链使用 softfp ABI(即它们不是 armhf),但我不能发誓。

以上是关于使用 -mfloat-abi=hard 和 -mfpu=vfp/neon Codesourcery Lite 2013.05-24的主要内容,如果未能解决你的问题,请参考以下文章

git reset --hard和git revert命令

请问:电脑设置中FIOPPY、LS120、hard Disk 、 CDROM 、 Zip、 USB-FDD 、 LAN 和IDE分别是啥意思?

请问:电脑设置中FIOPPY、LS120、hard Disk 、 CDROM 、 Zip、 USB-FDD 、 LAN 和IDE分别是啥意思?

在arcgis中hard,line和soft,line各有啥用

Chrome 中的“Normal Reload”、“Hard Reload”和“Empty Cache and Hard Reload”有啥区别?

git reset --soft,--hard的区别