"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/しかし、成功しませんでした。私が得る2番目のエラーは
/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システムでは、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