【问题标题】:Cross compiling for raspberryPi -- including libraries from synchronized filesystemraspberryPi 的交叉编译——包括来自同步文件系统的库
【发布时间】:2016-10-07 19:48:18
【问题描述】:

我正在尝试在我的 PC 上交叉编译简单项目以开始使用 RaspberryPi。我在网上找到了一些教程并制作了 cmake 文件。基本的 cmake 文件在 rpi 端工作,但交叉编译附加文件有一些问题。 Makefiles 生成正确,但调用 make 抛出它找不到 wiringPi.h 库,我正在使用它。我已将 /lib 和 /usr 从 rpi 同步到我的电脑。

这是我用于交叉编译的 cmake。

#info
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
# specify the cross compilers
SET(CMAKE_C_COMPILER
/home/voodoo16/raspberryPi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER
/home/voodoo16/raspberryPi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /home/voodoo16/raspberryPi/fs)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

当然我通过以下方式调用 cmake 创建:

cmake -DCMAKE_TOOLCHAIN_FILE=crossCompile.cmake .

文件存在于 fs 文件夹中。这是 find 的输出:

voodoo16@tesla:[~/raspberryPi/fs]$ find -name *wiringPi*
./usr/local/include/wiringPiSPI.h
./usr/local/include/wiringPi.h
./usr/local/include/wiringPiI2C.h
./usr/local/lib/libwiringPi.so
./usr/local/lib/libwiringPi.so.2.32
./usr/local/lib/libwiringPiDev.so
./usr/local/lib/libwiringPiDev.so.2.32
./usr/lib/libwiringPi.so
./usr/lib/libwiringPiDev.so

我想我缺少一些 cmake 命令,它允许使用标准 #include <lib.h> 从 rpi 文件系统而不是通过 pc 系统查看库。

最好的问候, voodoo16.

【问题讨论】:

    标签: c cmake raspberry-pi cross-compiling


    【解决方案1】:

    您需要设置 CMake 变量 CMAKE_SYSROOT 用于提示编译器进行交叉编译:

    set(CMAKE_SYSROOT "/home/voodoo16/raspberryPi/fs")
    

    CMake 变量 CMAKE_FIND_* 仅影响 CMake find_* 命令,它们不会直接提示编译器。另一方面,CMAKE_SYSROOT 变量也提示 find_* 命令。

    【讨论】:

    • 这行得通,但还有另一个问题。现在它看不到<sys/cdefs.h>。可能与cmake问题或编译器本身有关?
    • 你确定你的sysroot下有这个头文件吗?
    • voodoo16@tesla:[~/raspberryPi/fs]$ find . -name *cdefs.h* ./usr/include/arm-linux-gnueabihf/sys/cdefs.h
    • 可能需要手动包含这个目录:include_directories("/usr/include/arm-linux-gnueabihf")
    • 这没有多大帮助。设置include_directories("/home/voodoo16/raspberryPi/fs/usr/include/arm-linux-gnueabihf")。解决缺少的<sys/cdefs.h>。然后它抱怨缺少<gnu/stubs-soft.h>(见鬼??)。将其更改为始终阅读 <gnu/stubs-hard.h>。在决赛中,它抱怨缺少-lwiringPi。所以也许它仍然看不到 fs 或者它是编译器的错误。
    猜你喜欢
    • 2019-06-05
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多