zoukankan      html  css  js  c++  java
  • 程序员的自我修养:链接、装载与库(一本书,估计没时间看。。。哭。。。)

    g++ -std=c++11 -I./include -I./include/asio/include main.cpp -o aaaa -L./lib -lhttp_server -lpthread

    最近在写http协议栈,给其他部门的服务作为各个服务的monitor使用。涉及到自己的代码与其他人的代码整合,编译的问题,特记录一些过程。

    待解决的问题:

    1.-lpthread在cmakelists里面不好使,target_link_libraries(monitor-agent
    ${CMAKE_DL_LIBS}
    ${CMAKE_THREAD_LIBS_INIT}
    ) 要用${CMAKE_THREAD_LIBS_INIT}才行,为啥??

    2.cmakelist编译动态库和静态库的关键字。

    3.编译静态库不是使用g++...使用的事ar,是一个将若干.o打包的过程。。。

    MakeFile的学习和书写

    https://www.cnblogs.com/lidabo/p/4521117.html

    https://blog.csdn.net/mgsweet/article/details/80084873

    # ifndef DDK_HOME
    # $(error "Can not find DDK_HOME env, please set it in environment!.")
    # endif
    
    # ifeq ($(mode),)
    # mode=AtlasDK
    # endif
    
    # ifeq ($(mode), AtlasDK)
    # CC := aarch64-linux-gnu-g++
    
    # LNK_FLAGS := 
    #     -L$(HOME)/ascend_ddk/device/lib -L$(DDK_HOME)/device/lib/ 
    #     -shared
    # else ifeq ($(mode), ASIC)
    # CC := $(DDK_HOME)/toolchains/aarch64-linux-gcc6.3/bin/aarch64-linux-gnu-g++
    # LNK_FLAGS := 
    #     -L$(HOME)/ascend_ddk/device/lib -L$(DDK_HOME)/device/lib/ 
    #     -shared
    # else
    # $(error "Unsupported mode: "$(mode)", please input: AtlasDK or ASIC.")
    # endif
    
    
    CC := g++
    FLAGS := -I./include/asio/include -I./include -g -std=c++11 -fPIC -DCPU_ONLY -DASIO_STANDALONE
    # FLAGS := -Iinclude/asio/include -g -std=c++11 -fPIC -DCPU_ONLY -DASIO_STANDALONE
    #INC_DIR := include
    SRC_DIR := ./src/http
    #HTTP_DIR := http
    BUILD_DIR := ./src/build
    BIN_DIR := ./lib
    #INCLUDE := -I./$(INC_DIR)
    DIRS := $(shell find $(SRC_DIR) -maxdepth 3 -type d)
    
    SOURCES  = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))  
    OBJECTS  = $(addprefix $(BUILD_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SOURCES)))) 
    
    $(BIN_DIR)/libhttp_server.so: $(OBJECTS)
        @mkdir -p $(BIN_DIR)
        $(CC) $(FLAGS) $(INCLUDE) -shared -fPIC $^ -o $@
    
    # $(BUILD_DIR)/main.o: ../main.cpp
    #     @mkdir -p $(BUILD_DIR)
    #     #$(CC) $(FLAGS) $(INCLUDE) -c -o $@ $(SRC_DIR)/main.cpp
    #     $(CC) $(FLAGS) -c -o $@ ../main.cpp
    
    $(BUILD_DIR)/server.o: $(SRC_DIR)/server.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
        
    $(BUILD_DIR)/connection.o: $(SRC_DIR)/connection/connection.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    $(BUILD_DIR)/connection_manager.o: $(SRC_DIR)/connection/connection_manager.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    $(BUILD_DIR)/request_handler.o: $(SRC_DIR)/handles/request_handler.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    $(BUILD_DIR)/request_parser.o: $(SRC_DIR)/handles/request_parser.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    $(BUILD_DIR)/mime_types.o: $(SRC_DIR)/message/mime_types.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    $(BUILD_DIR)/request.o: $(SRC_DIR)/message/request.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    $(BUILD_DIR)/response.o: $(SRC_DIR)/message/response.cpp
        @mkdir -p $(BUILD_DIR)
        $(CC) $(FLAGS) -c -o $@ $<
    
    clean:  
        @rm -rf $(BUILD_DIR)
        @rm -f $(BIN_DIR)/libhttp_server.so

    (编译)使用动态库:参考b站linux全栈视频讲解

    g++ -std=c++11 -I./include -I./include/asio/include main.cpp -o aaaa -L./lib -lhttp_server -lpthread

  • 相关阅读:
    干货分享:如何使用Kubernetes的Ingress API
    十年OpenStack Ussuri最新版发布 主要改进在可靠性、安全性和用例支持等方面
    如何更好地优化容器的创建?这些技巧你务必收藏
    Kubernetes是容器化微服务的圣杯么?
    微服务是否真的需要服务网格?
    ZOOM火速收购加密公司Kaybase 能否补齐安全短板?
    5个实例告诉您:如何实施成功的容器化多云策略
    新基建火了,开源云计算渠道能做什么?
    盘点6个Kubernetes监视工具
    掌握这10种方法帮你快速在Linux上分析二进制文件
  • 原文地址:https://www.cnblogs.com/kongweisi/p/14371602.html
Copyright © 2011-2022 走看看