【发布时间】:2017-03-26 10:39:33
【问题描述】:
我正在按照这个问题 (Installing Raspberry Pi Cross-Compiler) 中的答案设置一个工具链,以便从 linux (Mint 18.1) 编译到树莓派 3。
我设置了所有内容,但是当我制作项目时,它找不到我看到的标题确实复制到了我的本地机器中。
例如,
我的项目的 cmake 交叉编译工具链文件如下所示:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/workspace/pi/xtools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/workspace/pi/xtools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/workspace/pi/pilibs/)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
$HOME/workspace/pi/xtools是 git://github.com/raspberrypi/tools.git 存储库。 -
$HOME/workspace/pi/pilibs包含我的 pi 的/lib和/usr目录。而且我可以确认如果我直接在 pi 上“制作”程序,它编译得很好。
但是当我在我的 Linux 机器上“制作”时,在使用 cmake 生成 makefile(使用 cmake-qt-gui;选择上面的工具链文件)后,它找不到标题:
fede@fede-mbp ~/workspace/mt/mt-build-pi $ make
Scanning dependencies of target cguittfont
[ 0%] Building CXX object src/cguittfont/CMakeFiles/cguittfont.dir/xCGUITTFont.cpp.o
In file included from /home/fede/workspace/pi/xtools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/include/c++/4.8.3/cstdlib:72:0,
from /home/fede/workspace/pi/xtools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/include/c++/4.8.3/bits/stl_algo.h:59,
from /home/fede/workspace/pi/xtools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/include/c++/4.8.3/algorithm:62,
from /home/fede/workspace/mt/minetest/src/cguittfont/xCGUITTFont.h:4,
from /home/fede/workspace/mt/minetest/src/cguittfont/xCGUITTFont.cpp:4:
/home/fede/workspace/pi/pilibs/usr/include/stdlib.h:760:34: fatal error: bits/stdlib-bsearch.h: No such file or directory
# include <bits/stdlib-bsearch.h>
^
compilation terminated.
虽然我有/home/fede/workspace/pi/pilibs/usr/include/arm-linux-gnueabihf/bits/stdlib-bsearch.h
【问题讨论】:
-
看起来
/home/fede/workspace/pi/pilibs/usr/include/arm-linux-gnueabihf/不在您的包含路径中。据我了解,具有编译器特定后缀的路径仅在编译器(工具链)本身附带时才包含在包含路径中。但是您的工具链位于完全不同的目录下,那么为什么要使用该路径?至于路径/home/fede/workspace/pi/pilibs/usr/include/,我猜它被搜索只是因为一些find_path()调用找到了它。此命令使用 CMAKE_FIND_ROOT_PATH 变量,但编译器本身不知道它。
标签: gcc cmake raspberry-pi