Makefile 静态库链接

1:-Xlinker

        参考:Linux 静态库 动态库

        Linux静态库链接顺序问题解决:

        $(CXX) $(LINKFLAGS) $(OBJS) -Xlinker “-(” $(LIBS) -Xlinker “-)” -o $@

        通过将所有需要被链接的静态库放入 -Xlinker “-(” 与 -Xlinker “-)” 之间,可以是 g++ 链接过程中, 自动循环链接所有静态库,从而解决了原本的链接顺序问题。

2.config.mk

# Generated by config_brpc.sh, don't modify manually
SYSTEM=Linux
HDRS=/usr/include/
LIBS=/usr/lib /usr/lib/x86_64-linux-gnu
PROTOC=/usr/bin/protoc
PROTOBUF_HDR=/usr/include/
CC=gcc
CXX=g++
GCC_VERSION=90300
STATIC_LINKINGS= -lgflags -lprotobuf -lleveldb -lsnappy -lbrpc -lnacos-cli
DYNAMIC_LINKINGS=-lpthread -lssl -lcrypto -ldl -lz -lrt -lcurl
CPPFLAGS=-DBRPC_WITH_GLOG=0 -DGFLAGS_NS=google -g
ifeq ($(NEED_LIBPROTOC), 1)
    STATIC_LINKINGS+=-lprotoc
endif
ifeq ($(NEED_GPERFTOOLS), 1)
    DYNAMIC_LINKINGS+=-ltcmalloc_and_profiler
endif
ifeq ($(NEED_GTEST), 1)
    STATIC_LINKINGS+=-lgtest
    STATIC_LINKINGS+=-lgtest_main
endif

3.Makefile

# $(shell ~/x64tool-root/protobuf/bin/protoc -I=./protobuf/ --cpp_out=./cppProtobuf ./protobuf/*)
PWD=$(shell pwd)
$(info ${PWD})

include ${PWD}/config.mk

#target
TARGET := VehicleServer

#toolchain
CXX	:= g++   
CC  := gcc

#flags
CFLAGS	:= -g -O2    
# CXXFLAGS := $(CFLAGS) -std=c++11 -lstdc++ -Wall -Wsign-compare
CXXFLAGS += $(CPPFLAGS) -std=c++0x -DNDEBUG -O2 -D__const__= -pipe -W -Wall -Wno-unused-parameter -fPIC -fno-omit-frame-pointer

#lib 
LINK_OPTIONS	= -Xlinker "-(" $^ -Wl,-Bstatic $(STATIC_LINKINGS) -Wl,-Bdynamic -Xlinker "-)" $(DYNAMIC_LINKINGS)

LDFLAGS    		:= -L./lib
DEFINES    		:=
LIBPATHS 		:= $(addprefix -L, $(LIBS))
LIBPATHS 		+= ${LDFLAGS}

LD_LIBRARY_PATH =


PROTOS = $(wildcard ./protobuf/*.proto)
PROTO_OBJS = $(PROTOS:.proto=.pb.o)
PROTO_GENS = $(PROTOS:.proto=.pb.h) $(PROTOS:.proto=.pb.cc)
PROTOC_EXTRA_ARGS =
# $(shell $(PROTOC) --cpp_out=./protobuf --proto_path=./protobuf $(PROTOS))

#include
HDRPATHS := $(addprefix -I, $(HDRS))
HDRS = include tcpServer deviceMsg global protobuf serverMsg msgList nacos include/nacos brpc include/brpc
HDRPATHS += $(addprefix -I$(PWD)/, $(HDRS))
$(info "******${HDRPATHS}")

#Source files
SOURCE := 	VehicleServer.cpp\
			tcpServer/TCPServer.cpp\
			tcpClient/TCPClient.cpp\
			global/global.cpp\
			deviceMsg/deviceMsg.cpp\
			deviceMsg/location.cpp\
			deviceMsg/alarm.cpp\
			deviceMsg/reply.cpp\
			deviceMsg/carID.cpp\
			deviceMsg/location.cpp\
			deviceMsg/speed.cpp\
			serverMsg/serverMsg.cpp\
			serverMsg/driver.cpp\
			msgList/msgInfoList.cpp\
			serverMsg/param.cpp\
			nacos/nacosControl.cpp\
			nacos/nacos.cpp\
			brpc/httpServer.cpp

# %.cpp -> %.o
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
$(info "****$(OBJS)")

.PHONY:all
all:$(TARGET)

# link
$(TARGET):$(PROTO_OBJS) $(OBJS)
	$(CXX) ${LIBPATHS} ${LINK_OPTIONS} -o $@ 

%.o:%.cpp
	$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@

%.pb.cc %.pb.h:%.proto
	@echo "Generating $@"
	@$(PROTOC) --cpp_out=./protobuf --proto_path=./protobuf $(PROTOC_EXTRA_ARGS) $<

%.o:%.cc
	@echo "Compiling $@"
	@$(CXX) -c $(HDRPATHS) $(CXXFLAGS) $< -o $@

.PHONY:clean
clean:
	rm -rf ${TARGET} $(PROTO_S) ${PROTO_H} $(PROTO_OBJS) $(OBJS) $(PROTO_GENS)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值