5

g++を使用してjsoncppをC++プログラムにリンクするにはどうすればよいですか?私は試した:

g++ -o program program.cpp -L/path/to/library/files -ljsoncpp, -ljson, -llibjsoncpp

しかし、g++は言い続けます:

/usr/bin/ld: cannot find -lsomething
4

3 に答える 3

5

また、バージョン0.6.0の時点で新しいjsoncppの新しいAmalgamatedバージョンを使用してみることができます。

Amalgamatedバージョンでは、2つのヘッダーファイルと1つの.cppファイルを含む1つのディレクトリをプロジェクトに追加するだけでjsoncppを使用できます。その後、jsoncppライブラリにリンクする必要がなく、jsoncppをプログラムに直接コンパイルできます。

于 2011-06-10T21:00:23.960 に答える
3

ファイルの実際の名前/path/to/library/filesを確認してください。*.a私のシステムでは、次のリンクを使用しています。

-ljson_linux-gcc-4.4.3_libmt

lib<name>.a一部のライブラリはからへのリンクを作成しlib<name>-<version>.aますが、jsoncppがこれを自動的に行うとは思いません。したがって、リンクするときに完全な名前を指定する必要があります。

于 2011-02-09T20:52:25.860 に答える
0

基本的に、パスとライブラリを指定する必要があります。

jsoncppライブラリにpkg-configあり、コマンドを使用できます

`pkg-config --cflags path/to/jsoncpp/build/pkg-config/jsoncpp.pc`

インクルードパスと

`pkg-config --libs ../jsoncpp/build/pkg-config/jsoncpp.pc`

リンク用(g ++でコマンドを実行する場合は、を使用します)。)である単一のコマンドを表示するには-L/libraryPath -ljsoncpp、「」なしでターミナルで上記のコマンドを実行します。

Makefileでこのコマンドを使用する方が簡単です。例として、私のMakefileものは次のとおりです。

CXX = g++

CXXFLAGS = -std=c++11
INC_PATH = `pkg-config --cflags ../jsoncpp/build/pkg-config/jsoncpp.pc`


LIBS = `pkg-config --libs ../jsoncpp/build/pkg-config/jsoncpp.pc`
SOURCES := $(wildcard *.cpp)
OBJDIR=obj

OBJECTS := $(patsubst %.cpp,$(OBJDIR)/%.o,$(SOURCES))
DEPENDS := $(patsubst %.cpp,$(OBJDIR)/%.d,$(SOURCES))

# ADD MORE WARNINGS!
WARNING := -Wall -Wextra

# .PHONY means these rules get executed even if
# files of those names exist.
.PHONY: all clean

# The first rule is the default, ie. "make",
# "make all" and "make parking" mean the same
all: yourProjectExecutableName

clean:
    $(RM) $(OBJECTS) $(DEPENDS) parking

# Linking the executable from the object files
yourProjectExecutableName: $(OBJECTS)
    $(CXX) $(WARNING) $(CXXFLAGS) $(INC_PATH) $^ -o $@ $(LIBS)

-include $(DEPENDS)

$(OBJDIR):
    mkdir -p $(OBJDIR)

$(OBJDIR)/%.o: %.cpp Makefile $(OBJDIR)
    $(CXX) $(WARNING) $(CXXFLAGS) $(INC_PATH) -MMD -MP -c $< -o $@

次に、実行するファイルのディレクトリでmake。最終的なコマンドはターミナルに出力されます

于 2018-09-11T08:33:22.910 に答える