CMake Error at CMakeLists.txt:75 (message): Did not find libjson
时间: 2025-07-25 09:37:08 浏览: 1
<think>我们正在解决一个CMake构建错误,错误信息是“Did not find libjson”。根据引用内容,用户遇到了找不到json-c库的问题。我们将结合引用中的信息和一般CMake依赖查找的解决方法,提供步骤清晰的解决方案。
分析引用内容:
[^1] 显示在CMakeLists.txt的第71行报错,且通过pkg-config查找json-c失败。
[^2] 提供了两个线索:1) 修改CMakeLists.txt中的最低版本要求;2) 注释掉lib/CMakeLists.txt中的一行。但该引用是针对zmap项目的,可能不通用。
[^3] 提到CMakeCache.txt可能缓存了旧的设置,建议删除。
[^4] 展示了一个成功安装依赖库(Ceres)的例子,其中使用了apt-get安装依赖,然后从源码构建安装。
综合以上,我们给出以下解决步骤:
1. 确保系统已安装json-c开发包。
在Ubuntu/Debian系统上,可以使用以下命令安装:
sudo apt-get install libjson-c-dev
对于其他Linux发行版,使用相应的包管理器安装。例如,Fedora/CentOS:
sudo yum install json-c-devel
2. 如果已经安装但CMake仍然找不到,可能是pkg-config配置问题。可以手动指定json-c的路径。
在CMakeLists.txt中,可以尝试使用find_package或pkg_search_module来查找json-c。例如:
find_package(PkgConfig REQUIRED)
pkg_search_module(JSONC REQUIRED json-c)
然后确保在链接目标时使用${JSONC_LIBRARIES},并包含头文件目录${JSONC_INCLUDE_DIRS}。
3. 如果上述方法无效,可以尝试清除CMake缓存(引用[^3]提到的问题)。
删除构建目录下的CMakeCache.txt和CMakeFiles目录,然后重新运行cmake。
4. 如果项目中的CMakeLists.txt有特定要求(如引用[^2]中修改版本或注释行),可以尝试修改。但注意,这可能是项目特定的,需要谨慎。
5. 如果系统安装的json-c版本不符合要求,可以考虑从源码编译安装json-c。
步骤类似于引用[^4]中安装ceres-solver的方法:
a. 从官网下载源码(如:https://github.com/json-c/json-c)
b. 解压并进入目录
c. 创建build目录,进入并运行cmake ..
d. make && sudo make install
然后,在项目的CMakeLists.txt中,可能需要手动指定json-c的路径,例如:
set(JSONC_INCLUDE_DIRS "/usr/local/include")
set(JSONC_LIBRARIES "/usr/local/lib/libjson-c.so")
6. 注意:如果从源码安装,可能需要设置环境变量LD_LIBRARY_PATH,以便运行时找到库。
7. 如果项目需要的是json-c的旧版本,可能需要安装特定版本,或者修改CMakeLists.txt中的版本检查。
8. 最后,确保CMakeLists.txt中链接库的部分正确。例如:
include_directories(${JSONC_INCLUDE_DIRS})
target_link_libraries(your_target ${JSONC_LIBRARIES})
根据以上步骤,用户应能解决找不到libjson的问题。
生成相关问题:
1. 如何检查系统是否安装了json-c开发包?
2. 如何使用pkg-config来查找已安装的库?
3. 在CMake中如何手动指定库的路径?
4. 如何从源码编译安装一个库并让CMake找到它?
5. 如何解决动态库加载失败的问题(如运行时找不到库)?</think>### CMake Error "Did not find libjson" 解决方法
根据引用内容,该错误通常发生在 CMake 通过 `pkg-config` 查找 `json-c` 库失败时。以下是系统化的解决方案:
#### 1. **安装 libjson-c 开发包**
```bash
# Ubuntu/Debian
sudo apt-get install libjson-c-dev
# CentOS/RHEL
sudo yum install json-c-devel
# 验证安装
pkg-config --modversion json-c # 应显示版本号如 0.15
```
安装后重新运行 CMake 构建[^1][^2]。
#### 2. **修改 CMakeLists.txt 配置**
- **降低 CMake 版本要求**(若版本冲突):
```cmake
cmake_minimum_required(VERSION 2.8.0) # 原版本过高时降低要求[^2]
```
- **添加手动查找逻辑**:
```cmake
find_package(PkgConfig REQUIRED)
pkg_check_modules(JSONC json-c) # 显式声明查找json-c
if(NOT JSONC_FOUND)
message(FATAL_ERROR "json-c not found, install via: sudo apt-get install libjson-c-dev")
endif()
```
在目标链接中添加 `${JSONC_LIBRARIES}`[^1][^4]。
#### 3. **清理 CMake 缓存**
```bash
rm -rf CMakeCache.txt CMakeFiles/ # 删除缓存文件[^3]
cmake . # 重新生成
```
#### 4. **源码编译安装 json-c**
若系统包不可用:
```bash
git clone https://github.com/json-c/json-c.git
cd json-c
mkdir build && cd build
cmake -DENABLE_CJSON_TEST=OFF .. # 禁用测试
make
sudo make install
```
安装后需更新动态库缓存:
```bash
sudo ldconfig
```
#### 5. **验证环境变量**
检查 `PKG_CONFIG_PATH`:
```bash
echo $PKG_CONFIG_PATH # 应为空或包含/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH # 若缺失则添加
```
### 常见问题排查
| 现象 | 解决方案 |
|------|----------|
| `pkg-config` 未安装 | `sudo apt-get install pkg-config` |
| 头文件路径错误 | CMake 中添加 `include_directories(/usr/include/json-c)` |
| 多版本冲突 | 清理旧版本:`sudo apt purge libjson-c*` |
> **关键提示**:引用[^2][^3]表明 CMake 缓存和版本要求是常见故障点,务必清理缓存并验证 `pkg-config` 能否定位库文件。
阅读全文
相关推荐
















