1

cmake を使用して jsoncpp ( lib_json ) を C++ プロジェクトにリンクしようとしています。あるコンピューターでは完全に正常に動作しますが、別のコンピューター (ほぼ同じ構成) では、アプリを実行するとエラーが発生します。

dyld: ライブラリがロードされていません: buildscons/linux-gcc-4.2.1/src/lib_json/libjson_linux-gcc-4.2.1_libmt.dylib

参照元: 実行可能ファイルへのパス

理由: 画像が見つかりません

これを引き起こしている可能性のある考えはありますか?jsoncpp を usr/lib/ に配置し、名前を libjsoncpp に変更したため、@ buildscons/linux-gcc-4.2.1/src/lib_json/libjson_linux-gcc-4.2.1_libmt.dylib を見ようとする理由さえ理解できません。そして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 ソース dir run から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(1回だけ)
  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 に答える