对raspberryPi进行交叉编译 - 包括来自同步文件系统的库

时间:2016-10-07 19:48:18

标签: c cmake raspberry-pi cross-compiling

我正在尝试在我的PC上交叉编译简单项目以开始使用RaspberryPi。我在网上发现了一些教程并制作了cmake文件。基本的cmake文件在rpi端工作,但是交叉编译附加文件有一些问题。 Makefile正确生成,但调用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。

1 个答案:

答案 0 :(得分:0)

您需要为关于交叉编译的提示编译器设置CMake变量CMAKE_SYSROOT

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

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