1

我正在尝试使用 cmake 将 jsoncpp ( lib_json ) 与 c++ 项目链接。它在一台计算机上运行良好,但在另一台计算机上(具有几乎相同的配置),当我执行我的应用程序时出现错误:

dyld:未加载库:buildscons/linux-gcc-4.2.1/src/lib_json/libjson_linux-gcc-4.2.1_libmt.dylib

引用自:可执行文件的路径

原因:找不到图片

知道可能是什么原因造成的吗?我什至不明白为什么它试图查看 @ buildscons/linux-gcc-4.2.1/src/lib_json/libjson_linux-gcc-4.2.1_libmt.dylib 因为我将 jsoncpp 放在 usr/lib/ 中并将名称更改为 libjsoncpp和 cmake 找到正确的路径/库。

我还在两台计算机上以完全相同的方式构建了 jsoncpp。

4

2 回答 2

0

我有同样的问题。如果你运行tool -L libjson_linux-gcc-4.2.1_libmt.dylib,你会看到一些奇怪的相对地址到你的libjson.... 我想如果你复制这个目录结构它会起作用,但这是一个糟糕的解决方案。

我所做的是我使用.a( libjson_linux-gcc-4.2.1_libmt.a) 并将其与我的二进制文件静态链接。在 XCode 中Build Settings-> Linking->Other Linker Flags我添加了绝对路径到我的.a. 对我来说就是/Users/martin/Downloads/jsoncpp-src-0.5.0/libs/linux-gcc-4.2.1/libjson_linux-gcc-4.2.1_libmt.a这样,仅此而已。

当然,我不知道你的用例,也许你真的需要动态链接它。

于 2013-09-11T11:08:11.263 回答
0

编辑:我现在明白了,您的意思是libjson,而不是libjsoncpp(它们不同!)

在你的标题中,你谈到了 jsoncpp,这就是这个答案的目的。但也许它对那些对标题感到困惑的人也很有用。


你可以'合并'jsoncpp。

从 jsoncpp 源目录运行python amalgamate.py创建:

dist/jsoncpp.cpp
dist/json/json.h
dist/json/json-forwards.h

现在您必须编译 jsoncpp.cpp 一次链接到结果jsoncpp.o

  1. g++ -o jsoncpp.o -c jsoncpp.cpp(只有一次)
  2. g++ -o executable jsoncpp.o main.cpp(每次)

如果您遇到错误,您可能必须#define JSON_IS_AMALGAMATION在包含之前json/json.h,但是...

...我试过了,它对我有用。(没有#define JSON_IS_AMALGAMATION,即)

使用的代码:

#include "json/json.h"
#include "json/json-forwards.h"

int main(int argc, char *argv[])
{
    Json::Reader    reader;
    Json::Value     value;
    if (!reader.parse("{\"hello\":\"world\"}", value, false))
    {
        std::cerr << "ERROR: Couldn't parse Json: " << reader.getFormattedErrorMessages() << std::endl;
        return -1;
    }
    std::cout << value.toStyledString() << std::endl;
    return 0;
}
于 2017-05-18T15:02:50.297 回答