centos7平台openppp2编译过程(非完整教程)
本文记录了从零开始在 CentOS 7 搭建开发环境到最终生成你的 ppp 可执行文件,包括 Boost、OpenSSL、jemalloc 的静态构建,并且确保最终可在 CentOS 7 上部署。这个流程适合新机器或干净环境。
我会按步骤分为 环境准备 → 第三方库编译 → 项目配置 → 编译生成。
1️⃣ 环境准备
更新系统
sudo yum update -y
sudo yum groupinstall “Development Tools” -y
sudo yum install epel-release -y
sudo yum install wget tar bzip2 make cmake git -y
安装 Devtoolset 11(GCC 11)
CentOS7 默认 GCC 版本太低,需用 SCL 安装新版本:
sudo yum install centos-release-scl -y
sudo yum install devtoolset-11 -y
scl enable devtoolset-11
bash
gcc –version # 确认 11.2.1+ g++ –version`
2️⃣ 创建工作目录
`mkdir -p /haoyu
cd /haoyu mkdir boost openssl jemalloc ppp_build`
3️⃣ Boost 1.86.0 静态编译
下载源码
`cd /haoyu/boost
wget https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz –no-check-certificate tar -xzf boost_1_86_0.tar.gz
cd boost_1_86_0`
配置编译(只编译需要库,并静态链接)
./bootstrap.sh --prefix=/haoyu/boost --with-libraries=system,thread,regex,filesystem,coroutine,context ./b2 install link=static threading=multi --prefix=/haoyu/boost
注意
link=static保证生成.a静态库。
确认生成:
ls /haoyu/boost/lib/libboost_*.a
4️⃣ OpenSSL 1.1.1 静态编译
下载源码
`cd /haoyu/openssl
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
tar -xzf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q`
编译静态库
`./Configure linux-x86_64 no-shared –prefix=/haoyu/openssl
make -j$(nproc) make install`
确认:
ls /haoyu/openssl/lib/libssl.a /haoyu/openssl/lib/libcrypto.a
5️⃣ jemalloc 静态编译
`cd /haoyu/jemalloc
wget https://github.com/jemalloc/jemalloc/releases/download/5.3.0/jemalloc-5.3.0.tar.bz2
tar -xjf jemalloc-5.3.0.tar.bz2 cd jemalloc-5.3.0
./configure –prefix=/haoyu/jemalloc –disable-shared
make -j$(nproc) make install`
确认:
ls /haoyu/jemalloc/lib/libjemalloc.a
6️⃣ 配置 CMake 项目
假设你的项目在 /haoyu/ppp,生成 build 目录:
`cd /haoyu/ppp
mkdir build
cd build`
CMake 配置
编辑 CMakeLists.txt 核心部分确保静态:
# Boost SET(BOOST_ROOT /haoyu/boost) SET(BOOST_INCLUDEDIR /haoyu/boost/include) SET(BOOST_LIBRARYDIR /haoyu/boost/lib) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost REQUIRED COMPONENTS system coroutine thread context regex filesystem) # OpenSSL set(OPENSSL_ROOT_DIR /haoyu/openssl) set(OPENSSL_INCLUDE_DIR /haoyu/openssl/include) set(OPENSSL_LIBRARIES /haoyu/openssl/lib/libssl.a /haoyu/openssl/lib/libcrypto.a) set(OPENSSL_USE_STATIC_LIBS TRUE) find_package(OpenSSL REQUIRED) # jemalloc SET(JEMALLOC_LIBRARY /haoyu/jemalloc/lib/libjemalloc.a) SET(JEMALLOC_INCLUDE_DIR /haoyu/jemalloc/include) # 强制静态 libstdc++ 和 libgcc OPTION(PPP_FORCE_STATIC "Force static linking" ON) IF(PPP_FORCE_STATIC) SET(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc -Wl,-Bstatic -Wl,-Bdynamic") SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") ENDIF()
设置包含和链接路径:
include_directories( ${PROJECT_SOURCE_DIR}/ ${BOOST_INCLUDEDIR} ${OPENSSL_INCLUDE_DIR} ${JEMALLOC_INCLUDE_DIR} ) link_directories( /haoyu/boost/lib /haoyu/openssl/lib /haoyu/jemalloc/lib ) target_link_libraries(ppp ${OPENSSL_LIBRARIES} ${JEMALLOC_LIBRARY} ${Boost_LIBRARIES} )
7️⃣ 编译项目
`cd /haoyu/ppp/build
cmake .. -DCMAKE_BUILD_TYPE=Release -DPPP_FORCE_STATIC=ON
make -j$(nproc)`
最终生成
/haoyu/ppp/bin/ppp
8️⃣ 验证静态链接
cd /haoyu/ppp/bin
ldd ppp
输出应该显示:
-
没有 Boost、OpenSSL、jemalloc 动态依赖
-
glibc 相关动态依赖仍会存在(如 libc.so.6、ld-linux.so.2)
9️⃣ 部署
将 /haoyu/ppp/bin/ppp 直接拷贝到目标 CentOS 7 系统即可运行,无需安装 Boost/OpenSSL/jemalloc。