当前位置: 首页 > news >正文

jsoncpp ubuntu编译问题

直接编译之后链接发现找不到 Json::Value::asString() const

很奇怪,发现是因为 libstdc++ 双ABI 不一致导致,GCC5 以后std::string / std::list … 引入了新 ABI(符号名里会多出 __cxx11)。

  1. 如果 是在旧 ABI
    -D_GLIBCXX_USE_CXX11_ABI=0 # gcc4时代的 ABI
    而 你的工程用默认的新 ABI (=1),链接器就只在可执行文件端生成
    Json::Value::asString[abi:cxx11]() const
    却在静态库里找不到同名符号,于是报 undefined reference

一、快速验证

  1. 查看库里符号(静态库同理,对应 .o

    nm -C libjsoncpp.a | grep asString

    旧 ABI 会显示

    Json::Value::asString() const

    新 ABI 会显示

    Json::Value::asString[abi:cxx11]() const

  2. 再看编译出的对象文件:

    nm -C CMakeFiles/.../SipDirectory.cpp.o | grep asString

    如果出现 [abi:cxx11] 而前一步没有,就说明 “程序在新 ABI、库在旧 ABI”。

二.解决办法

修改jsoncpp源码中顶级cmakelist文件,在其中加入:

add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)

http://www.xdnf.cn/news/978355.html

相关文章:

  • Proof of Talk专访CertiK联创顾荣辉:全周期安全方案护航Web3生态
  • Cilium动手实验室: 精通之旅---22.Cilium Traffic Optimization
  • OA协同平台有哪些功能?OA协同办公软件平台如何选择?
  • 腾讯开源 ovCompose 跨平台框架:实现一次跨三端(Android/iOS/鸿蒙)
  • 网络请求与本地存储:Axios 与 AsyncStorage 在 React Native 中的应用
  • 升级 Ubuntu Linux 内核的几种不同方法
  • 同步与异步:软件工程中的时空艺术与实践智慧-以蜻蜓hr人才系统举例-优雅草卓伊凡
  • 二刷苍穹外卖 day02
  • 2023蓝桥杯C/C++ B组国赛
  • PyTorch:让深度学习飞入寻常百姓家(从零开始玩转张量与神经网络!)
  • 开疆智能ModbusTCP转Canopen网关连接汇川PLC配置案例
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 4】【AdapterState介绍】
  • 25-Oracle 23ai DBMS_SEARCH — Ubiquitous Search(无处不在的搜索)
  • Qt Connections详解:信号与槽的核心机制
  • spring boot2 +java-jwt轻量实现jwt
  • AI中间件,构建大模型应用的标准化接入枢纽
  • 文献管理软件EndNote下载与安装教程(详细教程)2025最新版详细图文安装教程
  • 2025年- H80-Lc188--198.打家劫舍(动态规划)--Java版
  • 前端基础知识ES6系列 - 03(数组新增了哪些扩展)
  • SCADA|信创KingSCADA4.0与KingSCADA3.8的几点不同
  • 基于微信小程序的天气预报app
  • 一键批量修改XML标签名称:告别手工修改,高效管理标注数据
  • LangChain文档加载器自动选择器:支持多种文件格式的统一加载方法
  • jupyter中的checkpoints为空/打不开解决办法
  • [Java 基础]Math 类
  • SnapViewer:解决PyTorch官方内存工具卡死问题,实现高效可视化
  • Android Studio 无法安装HAXM,点击之后无反应
  • 链 表 类 型 全 面 总 结:单 向、双 向、循 环 链 表 的 特 性 与 选 型 指 南
  • 系统入侵排查实战指南:从Windows到Linux的应急响应与溯源分析​
  • Qt 中directoryChanged监听某个目录的内容是否发生变化