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




