fatal error: gnu/stubs-soft.h: No such file or directory

20,342

From the name of your cross compiler, "cortexa9hf-vfp-neon-poky-linux-gnueabi", it targets the Cortex-A9 with VFP architecture and neon enabled. Adding -mfloat-abi=hard switch should solve the problem.

From GCC manual:

-mfloat-abi=name:

Specifies which floating-point ABI to use. Permissible values are: ‘soft’, ‘softfp’ and ‘hard’.

Specifying ‘soft’ causes GCC to generate output containing library calls for floating-point operations. ‘softfp’ allows the generation of code using hardware floating-point instructions, but still uses the soft-float calling conventions. ‘hard’ allows generation of floating-point instructions and uses FPU-specific calling conventions.

The default depends on the specific target configuration. Note that the hard-float and soft-float ABIs are not link-compatible; you must compile your entire program with the same ABI, and link with a compatible set of libraries.

Share:
20,342
hal2000
Author by

hal2000

Updated on July 09, 2022

Comments

  • hal2000
    hal2000 almost 2 years

    I had the below error while cross compiling a helloworld program on 64 bit Ubuntu 16.04, for 32 bit Cortex A9 platform.

    $ make
    /usr/local/comp/poky/1.7/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc -march=armv7-a -mthumb-interwork -mtune=cortex-a9 --sysroot=/usr/local/comp/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi -Iinclude -Wall -O3 -c -o main.o main.c
    In file included from /usr/local/comp/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/features.h:389:0,
                 from /usr/local/comp/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/stdio.h:27,
                 from main.c:5:
    /usr/local/comp/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/gnu/stubs.h:7:29: fatal error: gnu/stubs-soft.h: No such file or directory
    # include <gnu/stubs-soft.h>
                             ^
    compilation terminated.
    makefile:45: recipe for target 'main.o' failed
    make: *** [main.o] Error 1
    

    Then I examine the content of the stubs.h file:

    $ cat /usr/local/comp/poky/1.7/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/include/gnu/stubs.h 
    /* This file is automatically generated.
       This file selects the right generated file of `__stub_FUNCTION' macros
       based on the architecture being compiled for.  */
    
    
    #if !defined __ARM_PCS_VFP
    # include <gnu/stubs-soft.h>
    #endif
    #if defined __ARM_PCS_VFP
    # include <gnu/stubs-hard.h>
    #endif
    

    Shall I define the _ARM_PCS_VFP in the makefile?

  • Michael
    Michael over 2 years
    I am new to this cross compiler stuff, where do I place the -m in an eclipse setting?