当前位置: 首页 > 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)

相关文章:

  • 安卓9.0系统修改定制化____系列讲解导读篇
  • Pico Unity开发记录
  • 做好机房整改前的准备工作
  • 【开源解析】:Python打造专业级USB安全弹出工具(附完整源码)
  • 基于uniapp实现自定义日历页面、年份月份选择、动态日历渲染、日期标记及备忘录、无组件依赖、多端兼容
  • 构建高效开发节奏:我的IDEA休息提醒插件实践
  • uniapp请求接口封装
  • vue定义的组件在外部引入时的问题
  • Hadoop 2.7.7 单机伪分布式安装与配置教程(JDK 8)
  • LSTM-XGBoost回归预测,多输入单输出(Matlab完整源码和数据)
  • 洛谷B3612 【深进1.例1】求区间和
  • matlab脉冲信号并绘制波形2025.6.11
  • java每日精进 6.11【消息队列】
  • Python训练营打卡 Day51
  • Weblogic 弱口令-任意文件读取
  • 零基础设计模式——行为型模式 - 中介者模式
  • IDEA 连接 Docker 一键打镜像
  • k8s 部署服务常见错误原因
  • 【基于阿里云上Ubantu(x86-64)系统部署配置K8s】
  • Springboot+idea热更新
  • 广州网站建设网站建设/百度推广一般要多少钱
  • 广州网站备案/金戈枸橼酸西地那非片
  • ps设计师网站/360竞价推广登录入口
  • 有什么网站可以接活做设计标志/百度竞价推广流程
  • 亚洲影视传媒有限公司/湖北百度seo排名
  • 网站备案被删除/济南公司网站推广优化最大的