我正在尝试使用“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系统下,请使用android ndk
导出 PATH=$PATH:/home/semilog/Android/android-ndk-r23b/toolchains/llvm/prebuilt/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/prebuilt /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