WSL下使用jsoncpp遇json.h找不到错误,求助解决方案
解决WSL Ubuntu中jsoncpp头文件找不到的问题
先确认jsoncpp的实际安装路径
Ubuntu通过apt install libjsoncpp-dev安装的jsoncpp,头文件默认放在/usr/include/jsoncpp/json/目录下,并非直接在系统默认的/usr/include根目录里。你可以用以下命令确认具体路径:
dpkg -L libjsoncpp-dev
执行后会列出所有安装文件,找到类似/usr/include/jsoncpp/json/json.h的条目,这就是头文件的实际位置。
两种可行解决办法
办法1:修改代码中的include语句
直接把代码里的#include <json.h>改成#include <json/json.h>,这样编译器会自动在默认的/usr/include目录下找到json子文件夹里的头文件,无需额外修改Makefile的包含路径。
办法2:调整Makefile的编译参数
如果不想修改代码,就在Makefile中添加头文件所在的父目录到包含路径,同时链接阶段必须指定jsoncpp库(否则编译通过后链接会报错):
CC = g++ CFLAGS += -Wall -g # 添加jsoncpp头文件的父目录到包含路径 CFLAGS += -I/usr/include/jsoncpp # 链接时指定jsoncpp库 LDFLAGS += -ljsoncpp all: your_program your_program: your_source.cpp $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
VS Code编辑器提示修正(可选)
如果VS Code仍对头文件路径标红,打开.vscode/c_cpp_properties.json,在includePath中添加/usr/include/jsoncpp:
{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceFolder}/**", "/usr/include", "/usr/include/jsoncpp" ], "compilerPath": "/usr/bin/gcc", "cppStandard": "gnu++17" } ], "version": 4 }
测试验证
写一段简单代码验证是否正常工作:
#include <iostream> #include <json/json.h> // 若用办法2则写#include <json.h> int main() { Json::Value root; root["test"] = "hello jsoncpp"; std::cout << root.toStyledString() << std::endl; return 0; }
运行make生成可执行文件,执行后若能正常输出JSON内容,说明问题已解决。
内容的提问来源于stack exchange,提问作者zbrandon98
相关产品推荐
相关产品推荐

