程序员的自我修养:链接、装载与库(一本书,估计没时间看。。。哭。。。)
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)