如何将库从包连接到 Makefile

问题描述 投票:0回答:0

有一个jsoncpp包,我在程序中使用它,我尝试将它连接到项目中,但是连接不上。

项目结构:

  • client.json
  • cross-build-make.sh
  • main.cpp
  • main.hpp
  • 制作文件

有一个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
makefile
© www.soinside.com 2019 - 2024. All rights reserved.