"gpiod" 라이브러리를 사용하여 프로그램을 크로스 컴파일하려고 합니다.
내 호스트 컴퓨터에는 Ubuntu 18.04가 있고 크로스 컴파일의 대상 플랫폼은 IMX8X SOM이 있는 마더보드입니다.
소스코드는 에서 찾았어요https://variwiki.com/index.php?title=MX8_GPIO&release=RELEASE_DUNFELL_V1.3_VAR-SOM-MX8X"2.2 libgpiod C 응용 프로그램" 단락에 따라 컴파일하고 싶습니다. 내 마더보드에 사용된 운영 체제는 Yocto로 컴파일된 "dunfell" 배포판입니다. 제가 사용하는 크로스 컴파일러도 Yocto 환경(aarch64-fslc-linux-gcc)에서 SDK로 생성됩니다.
컴파일할 때 가장 먼저 얻는 것은
"fatal error: gpiod.h: No such file or directory"
따라서 이 라이브러리는 기본적으로 제공되는 툴체인에 포함되지 않습니다. 그래서 아래 지침에 따라 컴퓨터에 (크로스) 라이브러리를 설치해 보았습니다.https://www.beyondlogic.org/an-introduction-to-chardev-gpio-and-libgpiod-on-the-raspberry-pi/, 그러나 성공하지 못했습니다. 내가 얻는 두 번째 오류는
/opt/fslc-wayland/3.1/sysroots/x86_64-fslcsdk-linux/usr/libexec/aarch64-fslc-linux/gcc/aarch64-fslc-linux/9.3.0/real-ld: cannot find -lgpiod
collect2: error: ld returned 1 exit status
내 컴파일 플래그는 다음과 같습니다.
CFLAGS = -Wall -I$(INCLUDE) --sysroot=${SDKTARGETSYSROOT} -Og -lgpiod
나는 이런 유형의 문제를 처음 접했고 약간의 실수를 저지르고 있기를 바랍니다. 누구든지 도움을 주실 수 있다면 미리 감사드립니다!
답변1
안드로이드 시스템에서는 android ndk를 사용하십시오.
내보내기 경로=$PATH:/home/semilog/Android/android-ndk-r23b/toolchains/llvm/prebuild/linux-x86_64/bin
./autogen.sh --enable-tools=yes --host=armv8 CC=aarch64-linux-android24-clang --with-sysroot=/home/semilog/Android/android-ndk-r23b/toolchains/llvm/prebuild /linux-x86_64/sysroot --prefix=/home/semilog/work/kernel/out
소스 코드에서 program_invocation_name을 수동으로 제거하여 시작하십시오.
모두 설치
답변2
export PATH=$PATH:/opt/arm-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/
configure.ac의 AC_FUNC_MALLOC 주석
./autogen.sh --enable-tools=yes --host=armv8 CC=aarch64-linux-gnu-gcc --prefix=/home/semilog/work/kernel/out
make all install