CMake交叉编译armel平台项目时找不到nlohmann/json.hpp头文件如何解决
错误产生原因
- 交叉编译器的搜索路径隔离:你使用的
arm-linux-gnueabi-g++-10是针对armel架构的交叉编译器,为了避免和宿主机x86架构的依赖混淆,默认只会扫描自身对应架构的sysroot下的头文件目录,不会主动读取宿主机的/usr/local/include路径。你将nlohmann库安装到了宿主机的全局头文件目录,交叉编译器无法识别该路径下的文件。 - CMake配置缺少头文件声明:你当前的CMakeLists.txt中没有显式指定额外的头文件搜索路径,即使依赖放在自定义路径下,编译器也无法完成定位。
解决方案
方案一:临时指定头文件路径(适用于单项目快速验证)
直接在CMakeLists.txt的add_executable配置前新增头文件搜索路径声明,明确让编译器去/usr/local/include找nlohmann的头文件:
# 新增如下配置行 include_directories(/usr/local/include) add_executable(${PROJECT_NAME} ${SRC_FILES})
修改完成后删除之前生成的CMake缓存文件(CMakeCache.txt和CMakeFiles目录),重新执行cmake、make命令即可完成编译。
方案二:将依赖安装到交叉编译器sysroot(适用于长期多项目交叉编译场景)
首先查询交叉编译器对应的sysroot路径:
arm-linux-gnueabi-g++-10 -print-sysroot
假设输出路径为/usr/arm-linux-gnueabi,将nlohmann头文件目录拷贝到该路径下的include目录即可:
sudo cp -r /usr/local/include/nlohmann /usr/arm-linux-gnueabi/include/
该方案不需要修改CMakeLists.txt配置,交叉编译器会默认扫描sysroot下的头文件目录,适合多个armel编译项目共用nlohmann依赖的场景。
内容的提问来源于stack exchange,提问作者Ivan Raih
相关产品推荐
相关产品推荐

