0x00 环境&目标
为了方便部署,直接打成一个静态执行文件,可以随意部署到linux
环境。
编译机器环境:
- Ubuntu 2204
- g++-12
- gcc-12
- 采用源码编译方式安装
drogon
依赖库安装
# 安装 openssl开发库
sudo apt install libssl-dev
# mysql 数据库
sudo apt install libmariadb-dev
# 安装 glibc源码
sudo apt install glibc-source -y
0x01 重点:
在编译 drogon
库时,就启动静态编译:
cmake .. -DCMAKE_CXX_FLAGS="-fcoroutines -std=c++20 -static -static-libgcc -L/usr/lib/x86_64-linux-gnu" -DCMAKE_BUILD_TYPE=Release
make && sudo make install
# 也可以指定CPU物理内核
make -j8 && sudo make install
中间遇到什么库找不到的问题,直接apt install
虽然上面启用了静态编译,但是在cmake ..
的时候,还是会发现链接了很多.so
动态库。
暂时解决办法就是 把相应的 .so
重命名成 .so_bak
,此时重新cmake ..
就可以成功链接到.a
静态库。
比如:
mv /usr/lib/x86_64-linux-gnu/libcares.so /usr/lib/x86_64-linux-gnu/libcares.so_bak
编译中途发现点问题,是在编译例子时报错,注释掉下面这一行:
option(BUILD_EXAMPLES "Build examples" ${BUILD_PROGRAMS})
0x02 通用静态打包配置
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXE_LINKER_FLAGS "-static")
project(app CXX)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
0x03 日志库配置使用
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXE_LINKER_FLAGS "-static")
project(app CXX)
find_package(spdlog REQUIRED)
# 定义编译输出文件
add_executable(app main.cc)
# 链接库配置
target_link_libraries(${PROJECT_NAME} PRIVATE spdlog::spdlog)
网友评论