CMake构建的库链接时找不到外部头文件nlohmann/json.hpp
问题分析与解决
为什么会报错?
1. 头文件依赖缺失
你的myLib.h包含了<nlohmann/json.hpp>,但直接用g++编译时,只指定了自己库的头文件路径(-I ../install/include/),g不知道nlohmann_json的头文件所在目录。虽然CMake里用PUBLIC关联了nlohmann_json,但这种依赖传递仅在CMake构建的项目中生效,直接用g命令时不会自动继承这些配置。
2. 链接命令写法错误
-l参数的作用是指定库名(比如-lmyLib),而非完整的库文件路径。要告诉g++去哪里找目标库,需要用-L参数指定库的搜索目录。
两种解决方式
方式一:手动修正g++命令
先确定nlohmann_json头文件的安装路径(比如系统默认的/usr/include,或是你自定义的安装目录),然后在命令里补充头文件路径,同时修正链接参数:
g++ testApp.cpp -o runApp -I ../install/include/ -I /path/to/nlohmann/json -L ../install/lib -lmyLib
如果nlohmann_json是通过包管理器安装的,头文件可能在系统默认路径,这时可以省略-I /path/to/nlohmann/json。
方式二:用CMake管理testApp(更省心)
既然你的库是用CMake构建的,推荐也用CMake编译testApp,这样依赖会自动传递,无需手动处理路径。在App目录下新建CMakeLists.txt:
cmake_minimum_required(VERSION 3.10) project(testApp) # 查找已安装的myLib find_package(myLib REQUIRED) add_executable(runApp testApp.cpp) # 链接myLib,CMake会自动处理它的依赖(包括nlohmann_json) target_link_libraries(runApp PRIVATE myLib::myLib)
然后执行以下命令构建:
mkdir build && cd build cmake .. -DCMAKE_PREFIX_PATH=../install # 指定myLib的安装目录 make
内容的提问来源于stack exchange,提问作者user3645869
相关产品推荐
相关产品推荐

