3

C++ コードに jsoncpp ライブラリを実装しようとしています。試してみるためだけに簡単なコードを書きましたが、コンパイルさえしていません。

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>

#ifndef json_included
#define json_included
#include "jsoncpp\include\json\json.h"
#endif

//#include "json\jsonC\json.h"
int main(int argc, char **argv)
{

std::string example = "{\"array\":[\"item1\", \"item2\"], \"not an array\":\"asdf\"}";
Json::Value value;
Json::Reader reader;

bool parsed = reader.parse(example, value, false);
std::cout << parsed;
return 0;
}

私が得ているエラーは次のとおりです。

undefined reference to `Json::Reader::parse(std::string const&, Json::Value&, bool)'
undefined reference to `Json::Reader::Reader()'
undefined reference to `Json::Value::~Value()'
undefined reference to `Json::Value::Value(Json::ValueType)'

私は C++ に少し慣れていません。インクルード ステートメントに欠けているものはありますか? それとも、jsonCpp には何か特別なものが必要ですか?

お時間をいただきありがとうございます!

4

6 に答える 6

5

コードはコンパイルされていますが、リンクされていません。JSON 共有ライブラリ ファイルをリンカーに提供するのを忘れました (または、新しいバージョンでは、結合された jsoncpp.cpp をプロジェクトに追加するのを忘れました)。

開発環境について詳しく知らなければ、より具体的な指示を与えることは困難です。

ところで、あなたは C++ を書いています。cstdioのようなC++ ヘッダーを使用stdio.hしてください。また、C++ のインクルードに失敗し、C++ をインクルードstringする JSON ヘッダーを介して "機能" したことは幸運でした。

于 2011-03-02T21:58:04.930 に答える
2

「未定義の参照」はリンカーの問題のように聞こえます。jsoncpp には、.so、.a、.lib、.dll ファイルなど、リンクする必要があるライブラリが付属していますか?

jsoncpp READMEによると、ライブラリは最初に を使用してビルドする必要がありますscons。おそらく、これにより、.so、.a、.lib、.dll ファイルなどのライブラリ ファイルが出力されます。次に、そのようなライブラリに対してリンクするためのコンパイラの規則に従う必要があります (たとえば、コンパイル時にコマンド ラインの最後に追加するか、IDE のプロジェクト構成の「追加ライブラリ」フィールドに追加します)。

于 2011-03-02T21:58:54.127 に答える
1

私の場合 (Ubuntu で CodeBlocks IDE を使用)、問題は、json.cpp ファイル (プロジェクト内から生成された) をビルド ターゲットに追加する必要があることでした。python amalgamate.pyjsoncpp

つまり、コンパイル文-c jsoncpp.cppにオプションを追加しました。g++

于 2015-12-29T19:13:44.703 に答える
0

jsoncpp をコンパイルすると、フォルダー libs/ にライブラリーが見つかります。便宜上、これを /usr/lib に置き、実行時に -llibjson_linux-gcc-4.4.3_libmt を引数として g++ に渡すことでリンクできます。

libjson_linux-gcc-4.4.3_libmt.so の名前を libjson.so に変更し、-ljson を指定してリンクできます。

于 2012-08-21T06:45:24.000 に答える
0

-ljson_linux-gcc-4.4.3_libmt などを使用して、json ライブラリにリンクする必要があります。

正確なライブラリ名は、ライブラリ ディレクトリ (例: /usr/lib) で確認できます。

Visual Studio を使用している場合は、.lib ファイルを [プロジェクト プロパティ]、[リンカー]、[入力]、[追加の依存関係] に追加し、[プロジェクト プロパティ]、[リンカー]、[全般]、[追加のライブラリ ディレクトリ] でパスを指定します。

于 2011-03-02T21:57:58.907 に答える
0

2 つの潜在的な問題:

  • jsoncpp ライブラリ コードの一部のバージョンには、リンクが正しく機能するために amalgated が amalgamation になる必要があるというバグがあります。

  • 他の回答が示唆したように、 #include

于 2012-08-01T04:55:39.053 に答える