有一个jsoncpp包,我在程序中使用它,我尝试将它连接到项目中,但是连接不上。
项目结构:
有一个Makefile:
CXX=g++
CXXFLAGS=-std=c++11 -Wall -Wextra -pedantic
JSONCPP_INCLUDE := $(shell pkg-config --cflags jsoncpp)
JSONCPP_LIB := $(shell pkg-config --libs jsoncpp)
TARGET=my_program
SRCS=main.cpp
OBJS=$(SRCS:.cpp=.o)
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(JSONCPP_LIB) $(OBJS) -o $(TARGET)
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(JSONCPP_INCLUDE) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
启动程序:
g++ -std=c++11 -Wall -Wextra -pedantic -I/usr/include/jsoncpp -c main.cpp -o main.o
g++ -std=c++11 -Wall -Wextra -pedantic -ljsoncpp main.o -o my_program
/usr/bin/ld: main.o: in function «main»:
main.cpp:(.text+0x2f): undefined reference to «Json::Value::Value(Json::ValueType)»
/usr/bin/ld: main.cpp:(.text+0x63): undefined reference to «Json::operator>>(std::istream&, Json::Value&)»
/usr/bin/ld: main.cpp:(.text+0x79): undefined reference to «Json::Value::operator[](char const*)»
/usr/bin/ld: main.cpp:(.text+0x8e): undefined reference to «Json::Value::asString[abi:cxx11]() const»
/usr/bin/ld: main.cpp:(.text+0xa4): undefined reference to «Json::Value::operator[](char const*)»
/usr/bin/ld: main.cpp:(.text+0xb9): undefined reference to «Json::Value::asString[abi:cxx11]() const»
/usr/bin/ld: main.cpp:(.text+0x168): undefined reference to «Json::Value::~Value()»
collect2: error: ld returned 1 exit status
make: *** [Makefile:25: my_program] Error 1
rm -f main.o my_program
我试着用手写路径,结果和自动搜索一样。
第一种情况并没有自动找到库的路径,所以第二种情况我明确指定了路径:
CXX=g++
CXXFLAGS=-std=c++11 -Wall -Wextra -pedantic
JSONCPP_INCLUDE=-I/usr/include/
JSONCPP_LIB=-L/usr/lib/x86_64-linux-gnu -ljsoncpp
TARGET=my_program
SRCS=main.cpp
OBJS=$(SRCS:.cpp=.o)
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(JSONCPP_LIB) $(OBJS) -o $(TARGET)
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(JSONCPP_INCLUDE) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
启动程序:
g++ -std=c++11 -Wall -Wextra -pedantic -I/usr/include/ -c main.cpp -o main.o
g++ -std=c++11 -Wall -Wextra -pedantic -L/usr/lib/x86_64-linux-gnu -ljsoncpp
/usr/bin/ld: main.o: in function «main»:
main.cpp:(.text+0x2f): undefined reference to «Json::Value::Value(Json::ValueType)»
/usr/bin/ld: main.cpp:(.text+0x63): undefined reference to «Json::operator>>(std::istream&, Json::Value&)»
/usr/bin/ld: main.cpp:(.text+0x79): undefined reference to «Json::Value::operator[](char const*)»
/usr/bin/ld: main.cpp:(.text+0x8e): undefined reference to «Json::Value::asString[abi:cxx11]() const»
/usr/bin/ld: main.cpp:(.text+0xa4): undefined reference to «Json::Value::operator[](char const*)»
/usr/bin/ld: main.cpp:(.text+0xb9): undefined reference to «Json::Value::asString[abi:cxx11]() const»
/usr/bin/ld: main.cpp:(.text+0x168): undefined reference to «Json::Value::~Value()»
collect2: error: ld returned 1 exit status
make: *** [Makefile:25: my_program] Error 1
rm -f main.o my_program