为 raspberryPi 交叉编译——包括来自同步文件系统的库
Cross compiling for raspberryPi -- including libraries from synchronized filesystem
我正在尝试在我的 PC 上交叉编译简单项目以开始在 RaspberryPi 上工作。我在网上找到了一些教程并制作了cmake文件。基本 cmake 文件在 rpi 端工作,但交叉编译附加文件有一些问题。 Makefile 已正确生成,但调用 make
会抛出找不到
wiringPi.h
库,我正在使用哪个 ofc。我已将 /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 文件夹中存在文件。这是查找的输出:
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.
您需要为提示编译器设置 CMake 变量 CMAKE_SYSROOT 关于交叉编译:
set(CMAKE_SYSROOT "/home/voodoo16/raspberryPi/fs")
CMake 变量 CMAKE_FIND_*
仅影响 CMake find_*
命令,它们不会直接提示编译器。另一方面,CMAKE_SYSROOT
变量也提示 find_*
命令。
我正在尝试在我的 PC 上交叉编译简单项目以开始在 RaspberryPi 上工作。我在网上找到了一些教程并制作了cmake文件。基本 cmake 文件在 rpi 端工作,但交叉编译附加文件有一些问题。 Makefile 已正确生成,但调用 make
会抛出找不到
wiringPi.h
库,我正在使用哪个 ofc。我已将 /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 文件夹中存在文件。这是查找的输出:
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>
.
此致, voodoo16.
您需要为提示编译器设置 CMake 变量 CMAKE_SYSROOT 关于交叉编译:
set(CMAKE_SYSROOT "/home/voodoo16/raspberryPi/fs")
CMake 变量 CMAKE_FIND_*
仅影响 CMake find_*
命令,它们不会直接提示编译器。另一方面,CMAKE_SYSROOT
变量也提示 find_*
命令。