目录

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。