链接jsoncpp(libjson)

时间:2013-06-24 13:35:38

标签: c++ macos libjson

我正在尝试使用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。

2 个答案:

答案 0 :(得分:0)

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

我所做的是使用.alibjson_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而且就是全部。

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

答案 1 :(得分: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(每次)
  3. 如果您收到错误,可能需要#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;
    }
    
相关问题