【问题标题】:Undefined reference in jsoncpp operator=jsoncpp 运算符中未定义的引用=
【发布时间】:2015-02-11 02:48:44
【问题描述】:

如何解决以下链接器错误 w.r.t jsoncpp operator=.

我像这样创建一个Json::Value 对象

Json::Value pt;
pt["type"] = 5;
pt["uuid"] = "f8c74622-d45e-4cfa-fe00-5e7042431c72";
pt["start frame"] = 10;
pt["duration"] = 20;
pt["payload"] = "aedddefffsadf";

当我尝试链接 Ubuntu 14.04 附带的默认 libjsoncpp-dev 时,会出现以下链接器错误

对 `Json::Value::operator=(Json::Value)' 的未定义引用

额外信息:

当我编译并链接到来自 GitHub 的最新 jsoncpp 时,我没有收到此链接器错误。

value.h(由 ubuntu apt 安装)在 /usr/include/jsoncpp/json 中有

Value &operator=( const Value &other );

最新的jsoncpp value.h有

Value &operator=(Value other);

【问题讨论】:

  • 你最好添加标签c++c++-11
  • 一般情况下,您需要使用与您(最终)要链接的库版本相同的头文件版本进行编译。如果您使用一个版本的头文件进行编译并链接到不同版本的库,则往往会发生不好的事情。如果您希望能够与 Ubuntu 14.04 中的默认 libjsoncpp-dev 链接,请务必使用这些头文件。

标签: c++ c++11 ubuntu-14.04 jsoncpp


【解决方案1】:

Debian 附带jsoncpp-0.6.0-rc2。我敢打赌 Ubuntu 也会这样做。

只需切换到jsoncpp-0.8.z,即binary-compatible with 0.6.0-rc2,并包含来自1.y.z 的大部分增强功能和错误修复。

实际上 Debian 目前正在切换到 0.8.z。在 Ubuntu 更新其发布的版本之前,您可能必须避免使用新功能(主要是 Builders),而是使用已弃用的 Readers/Writers,这可能是您已经在做的事情。所以你应该很容易让一切正常工作。

【讨论】:

  • 你是说这是 0.6.0-rc2 的 bug 吗?
  • 不,不是错误。在1.y.z(和0.7.z,意外)中进行了非二进制兼容的更改。但是0.8.z 二进制兼容0.6.0-rc2。更改是为了复制和交换习语,为了提高效率,实际上并没有必要。
  • 那么 OP 是如何从“Ubuntu 14.04 附带的默认 libjsoncpp-dev”中发现自己的链接器错误的?
  • 不知何故,OP 已针对最新版本的标头进行编译,同时链接到旧库。我不知道怎么做。
猜你喜欢
  • 2012-06-24
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多