it-swarm-ko.tech

치명적인 오류 : gnu / stubs-soft.h : 해당 파일 또는 디렉토리가 없음

32 비트 Cortex A9 플랫폼을 위해 64 비트 우분투 16.04에서 helloworld 프로그램을 크로스 컴파일하는 동안 아래 오류가 발생했습니다.

$ 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

그런 다음 stubs.h 파일의 내용을 검사합니다.

$ 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

_ARM_PCS_VFP makefile에?

5
hal2000

크로스 컴파일러의 이름 인 "cortexa9hf-vfp-neon-poky-linux-gnueabi"에서 VFP 아키텍처 및 네온이 활성화 된 Cortex-A9를 대상으로합니다. -mfloat-abi=hard 스위치를 추가하면 문제가 해결됩니다.

GCC 매뉴얼에서 :

-mfloat-abi = 이름 :

사용할 부동 소수점 ABI를 지정합니다. 허용되는 값은‘soft’,‘softfp’및‘hard’입니다.

'soft'를 지정하면 GCC는 부동 소수점 연산에 대한 라이브러리 호출을 포함하는 출력을 생성합니다. 'softfp'는 하드웨어 부동 소수점 명령어를 사용하여 코드를 생성 할 수 있지만 여전히 소프트 부동 호출 규칙을 사용합니다. '하드 (hard)'는 부동 소수점 명령어 생성을 허용하고 FPU 특정 호출 규칙을 사용합니다.

기본값은 특정 대상 구성에 따라 다릅니다. 하드-플로트 및 소프트-플로트 ABI는 링크 호환되지 않습니다. 전체 프로그램을 동일한 ABI로 컴파일하고 호환되는 라이브러리 세트와 링크해야합니다.

12
radiohead