You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Jsoncpp运行时错误求助:无法打开libjsoncpp.so.20共享对象文件

我来帮你搞定这个Jsoncpp动态库找不到的问题!这个报错本质是程序运行时,系统没法定位到libjsoncpp.so.20这个共享库文件,咱们从CMake配置和系统库路径两个维度来修复:

1. 修正CMakeLists.txt的配置(核心步骤)

首先确保你的CMake能正确找到并链接Jsoncpp,推荐用现代CMake的写法,避免手动硬编码库路径,这样CMake会自动处理库的依赖和路径问题:

# 1. 查找系统或自定义安装的Jsoncpp包
find_package(jsoncpp REQUIRED)

# 2. 定义你的可执行文件(替换成你的实际源文件)
add_executable(your_program main.cpp curl_fetch.cpp)

# 3. 链接Jsoncpp库到你的程序(用官方提供的目标,不用手动写库名)
target_link_libraries(your_program PRIVATE JsonCpp::JsonCpp)

如果你是自己编译安装的Jsoncpp(不是通过系统包管理器装的),需要在find_package里指定安装路径,比如:

find_package(jsoncpp REQUIRED PATHS /home/yourname/jsoncpp/install)

2. 解决运行时库路径找不到的问题

如果CMake配置没问题,但运行时还是报错,那就是系统的动态库搜索路径没包含Jsoncpp库所在的目录,给你两种解决方式:

临时测试方案(快速验证)

运行程序前先设置环境变量,告诉系统去哪里找库:

# 替换成你的libjsoncpp.so.20所在目录,比如/usr/local/lib或者你编译的build/lib
export LD_LIBRARY_PATH=/path/to/jsoncpp/lib:$LD_LIBRARY_PATH
./your_program

永久生效方案(推荐)

方法A:添加系统库路径

把Jsoncpp的库目录添加到系统动态库配置里,让系统永久识别:

# 替换成实际路径,比如/usr/local/lib
echo "/path/to/jsoncpp/lib" | sudo tee /etc/ld.so.conf.d/jsoncpp.conf
sudo ldconfig

方法B:让程序编译时自带库路径

在CMakeLists.txt里添加RPATH配置,让程序运行时自动去指定路径找库:

# 让程序继承链接时的库路径
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

# 或者手动指定Jsoncpp的库路径
set_target_properties(your_program PROPERTIES INSTALL_RPATH "/path/to/jsoncpp/lib")

3. 先确认Jsoncpp是否真的正确安装

先排查下libjsoncpp.so.20是否存在:

find / -name "libjsoncpp.so.20" 2>/dev/null

如果找不到,说明你要么没装Jsoncpp,要么装的是其他版本(比如libjsoncpp.so.25),这时候需要重新安装对应版本的Jsoncpp,或者调整CMake去适配已安装的版本。

另外你提到的「编辑1:cmake输出」,如果输出里显示CMake没找到Jsoncpp,或者找到的路径不对,那就要先解决CMake的查找问题,比如检查CMAKE_PREFIX_PATH是否包含Jsoncpp的安装目录。

内容的提问来源于stack exchange,提问作者skr

火山引擎 最新活动