Compatibility with CMake < 3.5 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- The C compiler identification is GNU 13.3.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at CMakeLists.txt:75 (message): Did not find libjson
时间: 2025-07-25 09:38:46 AIGC 浏览: 53
<think>我们正在处理用户关于CMake配置中出现的两个问题:
1. CMake兼容性警告(要求CMake版本不低于3.5)
2. 找不到libjson库(错误:Could not find libjson)
根据用户提供的引用[1]和[2],我们可以推断用户可能正在尝试安装或构建一个依赖于libjson的项目。引用[1]中提到了安装libjson-c-dev,引用[2]中提到了安装json-c-devel(在Fedora系)和mingw-w64-x86_64-json-c(在MSYS2中)。因此,解决思路是确保系统已安装json-c开发包,并正确配置CMake以找到它。
步骤:
1. **安装json-c开发包**:
根据用户的操作系统选择对应的包:
- Ubuntu/Debian: `sudo apt-get install libjson-c-dev`
- Fedora/CentOS: `sudo dnf install json-c-devel`
- MSYS2 (Windows): `pacman -S mingw-w64-x86_64-json-c`
2. **更新CMake版本**(如果版本过低):
用户遇到的兼容性警告可能是因为CMake版本低于3.5。建议升级CMake:
- Ubuntu/Debian:
```bash
sudo apt-get install cmake
# 或者通过官方源安装最新版(如果系统源版本过低)
```
- 其他系统:参考CMake官网下载最新版本。
3. **在CMakeLists.txt中正确查找json-c库**:
使用`find_package`命令查找json-c,并链接到目标。
示例CMakeLists.txt片段:
```cmake
cmake_minimum_required(VERSION 3.5) # 确保满足最低版本要求
project(YourProjectName)
# 查找json-c库
find_package(PkgConfig REQUIRED)
pkg_check_modules(JSON-C REQUIRED json-c)
# 如果pkg-config找不到,可以尝试使用find_library
if(NOT JSON-C_FOUND)
find_library(JSON-C_LIBRARY NAMES json-c)
find_path(JSON-C_INCLUDE_DIR json-c/json.h)
if(JSON-C_LIBRARY AND JSON-C_INCLUDE_DIR)
set(JSON-C_LIBRARIES ${JSON-C_LIBRARY})
set(JSON-C_INCLUDE_DIRS ${JSON-C_INCLUDE_DIR})
else()
message(FATAL_ERROR "json-c library not found")
endif()
endif()
include_directories(${JSON-C_INCLUDE_DIRS})
add_executable(yourapp yoursource.c)
target_link_libraries(yourapp ${JSON-C_LIBRARIES})
```
4. **如果仍然找不到,可以尝试设置PKG_CONFIG_PATH**:
有时json-c的pc文件不在默认路径,可以手动指定:
```bash
export PKG_CONFIG_PATH=/path/to/json-c/pkgconfig:$PKG_CONFIG_PATH
```
然后重新运行CMake。
5. **在Windows上使用MSYS2的注意事项**:
如引用[2]所述,在MSYS2中需要以管理员身份运行mingw64.exe,然后安装所需的包。在CMake配置时,需要指定使用MSYS2的编译器工具链。
6. **验证安装**:
可以编写一个简单的测试程序来验证json-c是否安装成功:
```c
#include <json-c/json.h>
int main() {
json_object *obj = json_object_new_object();
json_object_object_add(obj, "test", json_object_new_string("value"));
printf("%s\n", json_object_to_json_string(obj));
return 0;
}
```
编译并运行:
```bash
gcc test.c -o test -ljson-c
./test
```
如果上述步骤仍然无法解决问题,可能需要检查CMake的缓存文件(删除CMakeCache.txt并重新配置)或查看json-c的安装路径是否正确。
相关问题:
1. 如何在CMake中正确设置库依赖?
2. 如何升级CMake到最新版本?
3. 不同操作系统下如何安装json-c开发包?
4. 如何在Windows上使用MSYS2配置开发环境?</think>### 解决 CMake 兼容性警告和 libjson 缺失问题
#### 问题分析
1. **CMake 版本警告**
`CMake compatibility warning with versions < 3.5` 表示您的 CMake 版本过低,某些新特性无法使用。
2. **libjson 缺失错误**
`Could not find libjson` 表明 CMake 在系统中找不到 JSON-C 开发库的头文件和链接库。
---
### 解决方案
#### 步骤 1:升级 CMake(解决兼容性警告)
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install cmake --upgrade
# Fedora/CentOS
sudo dnf upgrade cmake
# 验证版本 (需 ≥ 3.5)
cmake --version
```
#### 步骤 2:安装 libjson-c 开发包(解决依赖缺失)
```bash
# Ubuntu/Debian
sudo apt-get install libjson-c-dev # 引用[1]
# Fedora/CentOS
sudo dnf install json-c-devel
# MSYS2 (Windows)
pacman -S mingw-w64-x86_64-json-c # 引用[2]
```
#### 步骤 3:修改 CMakeLists.txt(正确链接库)
在您的项目中修改 `CMakeLists.txt`:
```cmake
cmake_minimum_required(VERSION 3.5) # 解决版本警告
project(YourProjectName)
find_package(PkgConfig REQUIRED)
pkg_check_modules(JSON-C REQUIRED json-c) # 查找json-c
include_directories(${JSON-C_INCLUDE_DIRS})
add_executable(your_app main.cpp)
target_link_libraries(your_app ${JSON-C_LIBRARIES})
```
#### 步骤 4:手动指定库路径(如果仍报错)
```cmake
# 在find_package后添加备用路径
if(NOT JSON-C_FOUND)
set(JSON-C_INCLUDE_DIRS "/usr/include/json-c") # 常见路径
set(JSON-C_LIBRARIES "/usr/lib/x86_64-linux-gnu/libjson-c.so")
endif()
```
---
### 关键注意事项
1. **开发包与运行时包的区别**
- `libjson-c-dev` (开发包) 包含头文件(`.h`)和链接库(`.so`)
- `libjson-c5` (运行时包) 仅包含运行时库
- **必须安装开发包**才能编译
2. **跨平台差异**
| 系统 | 包名 | 安装命令 |
|------------|--------------------------|------------------------------|
| Ubuntu | `libjson-c-dev` | `sudo apt install...` |
| MSYS2 | `mingw-w64-x86_64-json-c`| `pacman -S...` |
| macOS | `json-c` | `brew install json-c` |
3. **编译器兼容性**
- GCC/Clang 通常无缝支持 JSON-C
- MSVC 需要源码编译:
```bash
git clone https://github.com/json-c/json-c
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/path/to/install ..
make install
```
---
### 验证安装
创建测试文件 `test_json.c`:
```c
#include <json-c/json.h>
#include <stdio.h>
int main() {
json_object *obj = json_object_new_object();
json_object_object_add(obj, "test", json_object_new_string("value"));
printf("%s\n", json_object_to_json_string(obj));
return 0;
}
```
编译运行:
```bash
gcc test_json.c -o test -ljson-c
./test
# 应输出: { "test": "value" }
```
---
### 常见问题排查
1. **头文件路径错误**
```bash
# 检查头文件是否存在
ls /usr/include/json-c/json.h
```
2. **库文件缺失**
```bash
# 检查动态库
ldconfig -p | grep libjson-c
```
3. **CMake缓存污染**
```bash
rm -rf CMakeCache.txt CMakeFiles/
cmake .
```
> 原理说明:JSON-C 是轻量级 C 语言 JSON 解析库,CMake 通过 `pkg_check_modules` 调用 pkg-config 工具查找其安装路径[^1][^2]。
---
### 相关问题
1. 如何在 Windows 上使用 MSYS2 配置 C/C++ 开发环境?
2. CMake 的 `find_package` 和 `pkg_check_modules` 有何区别?
3. 如何为不同编译器(GCC/MSVC/Clang)配置 JSON-C 依赖?
4. CMake 版本过低会导致哪些常见兼容性问题?
阅读全文
相关推荐












