Ubuntu 22.04下C++17程序使用nlohmann JSON解析器遇编译错误求助
解决Ubuntu 22.04下g++编译nlohmann JSON的头文件问题
先纠正你的编译命令错误
你当前的编译命令g++ geojson geojson.cpp -std=c++17 ./geojson参数顺序完全错误,正确的编译命令应该是:
g++ geojson.cpp -std=c++17 -o geojson
其中-o geojson指定编译后的可执行文件名为geojson,参数顺序要遵循「源文件在前,选项在后」的基本规则。
两种解决头文件找不到的方案
方案一:直接安装系统包(最省心)
Ubuntu 22.04官方源里已经提供了nlohmann JSON的开发包,直接安装即可:
sudo apt update && sudo apt install libnlohmann-dev
安装完成后,你的代码可以保留#include <nlohmann/json.hpp>,编译时无需额外指定头文件路径,g++会自动从系统默认的include目录找到它。
方案二:手动放置单头文件(无需安装系统包)
如果你坚持用手动下载的单头文件版本,需要按以下步骤操作:
- 在你的项目根目录下创建
include/nlohmann目录结构 - 将下载的
json.hpp文件放入include/nlohmann目录中 - 代码里保持
#include <nlohmann/json.hpp>不变 - 编译时添加
-I./include参数,告诉g++去当前目录的include文件夹下查找头文件:
g++ geojson.cpp -std=c++17 -I./include -o geojson
你之前操作的问题点
- 编译命令参数顺序错误,导致命令逻辑混乱
- 手动放置头文件时,没有将
json.hpp放在nlohmann子目录下,而头文件内部的引用是#include <nlohmann/...>格式,g++无法找到对应路径的文件,因此报错。
内容的提问来源于stack exchange,提问作者Ed Friesema




