【发布时间】:2016-03-30 19:56:51
【问题描述】:
这个问题与交叉编译没有特别的关系,但由于我在尝试交叉编译库时遇到了与体系结构特定的头文件相关的问题而出现。
我正在尝试交叉编译 OpenCV,目标是 ARM 处理器,我正在 x86_64 处理器上编译。构建失败,因为找不到头文件:
/usr/include/zlib.h:34:19: 致命错误: zconf.h: 否 这样的文件或目录#include "zconf.h"
果然在zlib.h中有对zconf.h的引用:
#include "zconf.h"
但是,当我查看<path_to_arm_filesys>/usr/include 时,我实际上在<path_to_arm_filesys>/usr/include/arm-linux-gnueabihf 目录下找到了zconf.h。因此,据我了解,C 预处理器找不到 zconf.h,因为对它的引用不包括对特定于体系结构的子目录的引用。
为了尝试了解zconf.h 是如何实际找到的,我参考了主机以及zconf.h 所在的位置。同样,它位于/usr/include 下,但在特定于架构的x86_64-linux-gnu 目录下。
因此,如果在任何#include 的源代码中都没有对体系结构的具体引用(正如预期的那样),(GNU)C 预处理器如何知道在哪里查找?预处理器是否已经知道它的体系结构目标并且可以自动将另一个体系结构特定目录附加到它知道的所有包含目录中?还是我必须使用这些特定目录的-I 标志专门通知它?
【问题讨论】:
标签: gcc c-preprocessor cross-compiling gnu