jsoncpp静态编译 Linux
时间: 2025-05-29 08:21:31 浏览: 17
### 如何在 Linux 上对 jsoncpp 进行静态编译
要在 Linux 系统上对 `jsoncpp` 进行静态编译,可以按照以下方法操作。以下是详细的配置教程:
#### 准备工作
确保已安装必要的开发工具链,包括 GCC 和 CMake。可以通过以下命令验证并安装这些工具:
```bash
sudo apt update
sudo apt install build-essential cmake git
```
#### 下载 JsonCpp 源码
通过 Git 或者直接下载压缩包获取最新版本的 `jsoncpp` 源码:
```bash
git clone https://github.com/open-source-parsers/jsoncpp.git
cd jsoncpp
```
如果选择手动下载,请解压到目标目录。
---
#### 编写 CMakeLists 文件支持静态库构建
默认情况下,`jsoncpp` 的构建脚本可能生成动态库 `.so` 和静态库 `.a`。为了仅生成静态库,可以在 `CMakeLists.txt` 中设置选项或者传递参数给 CMake 命令。
修改或确认项目的根目录中的 `CMakeLists.txt` 是否包含如下内容:
```cmake
set(JSONCPP_WITH_CMAKE_PACKAGE ON CACHE BOOL "Enable generation of a JSONCPPConfig.cmake file.")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Disable shared library building.") # 关键:关闭共享库构建
add_subdirectory(src/lib_json)
```
如果没有此文件,则可以直接创建一个新的 `CMakeLists.txt` 并添加上述内容。
---
#### 使用 CMake 构建静态库
进入源码目录后,执行以下步骤完成静态库的构建:
1. 创建一个单独的构建目录用于隔离编译产物:
```bash
mkdir -p build && cd build
```
2. 调用 CMake 配置项目,并显式禁用动态库生成:
```bash
cmake .. -DBUILD_SHARED_LIBS=OFF
```
此处 `-DBUILD_SHARED_LIBS=OFF` 参数强制只生成静态库。
3. 执行实际编译过程:
```bash
make
```
成功完成后,在当前目录下会生成静态库文件 `libjsoncpp.a`[^1]。
---
#### 移动静态库和头文件至指定位置
通常建议将生成的静态库及其对应的头文件复制到标准路径以便后续使用。例如:
```bash
sudo cp src/lib_json/*.a /usr/local/lib/
sudo cp include/json/* /usr/local/include/
```
也可以将其放置于自定义工程目录中(如之前提到的 `build`, `include`, 和 `lib` 结构)[^3]。
---
#### 测试静态库链接
编写简单的测试程序来验证静态库是否正常工作:
```cpp
// test.cpp
#include <iostream>
#include <json/json.h>
int main() {
using namespace std;
Json::Value root;
root["key"] = "value";
cout << "JSON Output: " << root.toStyledString() << endl;
return 0;
}
```
编译时需链接静态库:
```bash
g++ test.cpp -o test -I/usr/local/include -L/usr/local/lib -ljsoncpp -static-libstdc++
```
注意最后附加了 `-static-libstdc++` 来确保完全静态化[^4]。
运行可执行文件以检查功能是否正确实现:
```bash
./test
```
---
### 注意事项
- 如果遇到找不到符号错误,可能是由于未正确指定头文件路径 (`-I`) 或库路径 (`-L`)。
- 对于较老版本的 Linux 发行版,GCC 版本较低可能导致兼容性问题,推荐升级到至少 GCC 7.x 及以上版本。
---
阅读全文
相关推荐


















