6

私はこのドキュメントに厳密に従って、プロジェクトにjsoncppライブラリをインストールして使用しました:jsoncpp README

しかし、私はまだ私のコンパイルでこの問題を抱えています:

g ++ -W -Wall -Werror -c -o src / ModConnection.o src / ModConnection.cpp src / ModConnection.cpp:15:23:致命的なエラー:json / json.h:そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。

私が使おうとしているときに起こります#include <json/json.h>

これが私のLinuxMAKEFILEです:

CXX     =       g++
NAME    =       bin/server
SRCS    =       ./src/ModConnection.cpp\
                ./src/unixNetwork.cpp
OBJS    =       $(SRCS:.cpp=.o)
CXXFLAGS +=     -W -Wall -Werror
LDFLAGS =       -L ./src/jsoncpp-src-0.5.0/buildscons/linux-gcc4.5.1/src/lib_json/libjson_linux-gcc-4.5.1_libmt.a -I src/jsoncpp-src-0.5.0/include
RM      =       rm -f
$(NAME) :       $(OBJS)
$(CXX) $(LDFLAGS) -o $(NAME) $(OBJS)

all     :       $(NAME)

clean   :
                $(RM) $(OBJS)

fclean  :       clean
                $(RM) $(NAME)

re      :       fclean all

.PHONY  :       all clean fclean re

助けてくれてありがとう。

4

1 に答える 1

3

変数でjsoncppのインクルードディレクトリを指定してLDFLAGSいますが、個々のcppファイルをコンパイルするまで、これらは使用されません。-I src/jsoncpp-src-0.5.0/includeコンパイル行に追加されるフラグのどこかに、などの部分を配置する必要がありますCXXFLAGS

少し拡張するには、暗黙のMakeルールを使用して個々の.cppファイルをビルドします。次に、それらのオブジェクトからアプリケーションをビルドするための特定のターゲットがあります。

詳細については、GNU Make Catalog of Rulesを参照してください。ただし、使用しているものは次のとおりです。

C ++プログラムのコンパイルは、n.cc、n.cpp、またはnCから、の形式のレシピを使用して自動的に行われます$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c。C ++ソースファイルには、「。C」の代わりに接尾辞「.cc」を使用することをお勧めします。

編集:今あなたのリンクエラーのために。

リンカが呼び出している関数の実際の実装を見つけることができないため、これらの問題が発生しています。

まず、-Lディレクティブはライブラリではなくフォルダを指す必要があります。-Lライブラリの検索パスを設定します。jsoncppビルドが作成されたライブラリが作成されたフォルダに設定する必要があります。次に、ライブラリ自体をリンクする必要があります。そのライブラリ名は巨大ですが、に追加-l json_linux-gcc-4.5.1_libmtすることLDFLAGSでうまくいくはずです。-l(それはより低いエルです)リンクする実際のライブラリを設定します。

于 2012-03-30T18:25:57.623 に答える