C++三方库配置说明
1 gRPC
1.1 库配置
1.1.1 gRPC1.37版本
1.1.1.1 配置
github下载:
git clone -b v1.37.0 https://github.com/grpc/grpc
第三方依赖库的下载:
cd grpc
#因为网速的原因,使用默认下载路径可能会失败,可以修改文件.gitmodules,将文件中github.com修改为bgithub.xyz进行下载
git submodule update --init
1.1.1.2 解决编译错误
问题1
MingGW编译器下:使用gcc-13.2编译会出现以下报错:
third_party/abseil-cpp/absl/strings/internal/str_format/extension.h:34:33: error: found ‘:’ in nested-name-specifier, expected ‘::’
34 | enum class FormatConversionChar : uint8_t;
| ^
| ::
third_party/abseil-cpp/absl/strings/internal/str_format/extension.h:34:12: error: ‘FormatConversionChar’ has not been declared
34 | enum class FormatConversionChar : uint8_t;
| ^~~~~~~~~~~~~~~~~~~~
third_party/abseil-cpp/absl/strings/internal/str_format/extension.h:35:6: warning: elaborated-type-specifier for a scoped enum must not use the ‘class’ keyword
35 | enum class FormatConversionCharSet : uint64_t;
解决办法:
- 前往third_party/abseil-cpp/absl/strings/internal/str_format/extension.h该文件,添加一行代码#include <stdint.h>
- 前往third_party\re2\util\pcre.h该文件,添加一行代码#include <stdint.h>
MingGW编译器下:修改third_party\boringssl-with-bazel\CMakeLists.txt文件,增加如下:
cmake_minimum_required(VERSION 3.0)
project(BoringSSL LANGUAGES C CXX)
#以下为新增
if(MINGW)
link_libraries(ws2_32)
endif()
问题2
修改third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc文件。
// 修改前
size_t stack_size = (std::max(SIGSTKSZ, 65536) + page_mask) & ~page_mask;
// 修改后
size_t stack_size = (std::max(SIGSTKSZ, 65536L) + page_mask) & ~page_mask; // 注意 65536 后面的 'L'
将 65536显式转换为 long int类型,使其与 SIGSTKSZ类型一致。
1.1.2 gRPC1.50版本
1.1.2.1 配置
github下载:
git clone -b v1.37.0 https://github.com/grpc/grpc
第三方依赖库的下载:
cd grpc
#因为网速的原因,使用默认下载路径可能会失败,可以修改文件.gitmodules,将文件中github.com修改为bgithub.xyz进行下载
git submodule update --init
1.1.2.2 解决编译错误
需要修改部分CMakeLists.txt的最小版本限制。
1.2 windows环境
# 构建
cmake -S . -B cmake/build -DgRPC_INSTALL=ON -DCMAKE_CXX_STANDARD=17 -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX="./cmake/gRPC_1_37_0" -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -DCMAKE_DEBUG_POSTFIX="d"
# 编译 Debug 版本
cmake --build cmake/build --config Debug -j 8
# 编译 Release 版本
cmake --build cmake/build --config Release -j 8
# 安装 Debug 版本
cmake --install cmake/build --config Debug
# 安装 Release 版本
cmake --install cmake/build --config Release
1.3 linux环境
# 构建
cmake -S . -B cmake/build -DgRPC_INSTALL=ON -DCMAKE_CXX_STANDARD=17 -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX="./cmake/gRPC_1_37_0" -D CMAKE_BUILD_TYPE=Release
# 编译
cmake --build cmake/build -j 8
# 安装
cmake --install cmake/build
**注意:**gRPC 1.37版本需要将grpc\third_party\abseil-cpp目录下的absl文件夹拷贝到安装目录下的include目录下。
2 spdlog
2.1 配置
github下载
git clone https://github.com/gabime/spdlog.git
2.2 windows环境
# 构建
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="./spdlog_1_15_2"
# 编译 Debug 版本
cmake --build build --config Debug -j 8
# 编译 Release 版本
cmake --build build --config Release -j 8
# 安装 Debug 版本
cmake --install build --config Debug
# 安装 Release 版本
cmake --install build --config Release
安装并不会把spdlogd.pdb一同安装在lib目录,因此要手动拷贝spdlogd.pdb文件,存在spdlogd.pdb文件,程序在Debug模式编译时可避免警告。
2.3 linux环境
# 构建
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="./spdlog_1_15_2"
# 编译
cmake --build build -j 8
# 安装
cmake --install build
3 CZMQ
***注意:***libzmq要和czmq匹配,本文libzmq4.3.5,czmq4.2.2
3.1 libzmq
3.1.1 配置
github下载:
git clone https://github.com/zeromq/libzmq.git
3.1.2 windows环境
# 构建
cmake -S . -B build -DBUILD_STATIC=ON -DBUILD_SHARED=OFF -DZMQ_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX="./libzmq_4_3_5" -DENABLE_DRAFTS=ON -DENABLE_CURVE=OFF -DWITH_LIBSODIUM=OFF
# 编译 Debug 版本
cmake --build build --config Debug -j 8
# 编译 Release 版本
cmake --build build --config Release -j 8
# 安装 Debug 版本
cmake --install build --config Debug
# 安装 Release 版本
cmake --install build --config Release
安装并不会把libzmq-v142-mt-sgd-4_3_5.pdb一同安装在lib目录,因此要手动拷贝libzmq-v142-mt-sgd-4_3_5.pdb文件。存在libzmq-v142-mt-sgd-4_3_5.pdb文件的情况下,程序在Debug模式编译时可避免警告。
3.1.3 linux环境
# 构建
cmake -S . -B build -DZMQ_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="./libzmq_4_3_5" -DENABLE_DRAFTS=ON -DENABLE_CURVE=OFF -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF
# 编译
cmake --build build -j 8
# 安装
cmake --install build
3.2 CZMQ
3.2.1 配置
github下载:
git clone https://github.com/zeromq/czmq.git
修改CMakeLists.txt文件:
修改czmq/CMakeLists.txt文件,默认情况下zmq中的zmq.h和zmq_utils.h并不会被安装到czmq的include目录。
# 修改前:
install(FILES ${czmq_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# 修改后
FILE(GLOB zmq_headers ${libzmq_INCLUDE_DIRS}/*.h)
install(FILES ${czmq_headers} ${zmq_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
修改czmq/CMakeLists.txt文件,if (CZMQ_BUILD_STATIC)静态编译条件下增加ZMQ_STATIC宏。增加ZMQ_STATIC宏可链接libzmq库的静态库,否则只能链接动态库。
# 修改前:
target_compile_definitions(czmq-static
PUBLIC CZMQ_STATIC
)
# 修改后
target_compile_definitions(czmq-static
PUBLIC CZMQ_STATIC ZMQ_STATIC
)
增加ADD_DEFINITIONS (-DZMQ_BUILD_DRAFT_API)
# 修改前:
IF (ENABLE_DRAFTS)
ADD_DEFINITIONS (-DCZMQ_BUILD_DRAFT_API)
ENDIF (ENABLE_DRAFTS)
# 修改后
IF (ENABLE_DRAFTS)
ADD_DEFINITIONS (-DCZMQ_BUILD_DRAFT_API)
ADD_DEFINITIONS (-DZMQ_BUILD_DRAFT_API)
ENDIF (ENABLE_DRAFTS)
3.2.2 windows环境
# 构建
cmake -S . -B build -DCZMQ_BUILD_SHARED=OFF -DCZMQ_BUILD_STATIC=ON -DCMAKE_PREFIX_PATH="C:/package/libzmq_4_3_5(指定libzmq安装路径)" -DCMAKE_INSTALL_PREFIX="./czmq_4_2_2" -DCMAKE_DEBUG_POSTFIX="d" -DENABLE_DRAFTS=ON
# 编译 Debug 版本
cmake --build build --config Debug -j 8
# 编译 Release 版本
cmake --build build --config Release -j 8
# 安装 Debug 版本
cmake --install build --config Debug
# 安装 Release 版本
cmake --install build --config Release
安装并不会把libczmqd.pdb一同安装在lib目录,因此要手动拷贝libczmqd.pdb文件,存在libczmqd.pdb文件,程序在Debug模式编译时可避免警告。
3.2.3 linux环境
# 构建
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="./czmq_4_2_2" -DCMAKE_PREFIX_PATH="~/package/libzmq_4_3_5(指定libzmq安装路径)" -DENABLE_DRAFTS=ON #-DCMAKE_C_FLAGS="-D_GNU_SOURCE" (树莓派需要添加这一项)
# 编译
cmake --build build -j 8
# 安装
cmake --install build
4 jsoncpp
4.1 配置
github下载:
git clone https://github.com/open-source-parsers/jsoncpp.git
4.1 windows环境
# 构建
cmake -S . -B build -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX="./jsoncpp_1_9_7" -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_DEBUG_POSTFIX="d"
# 编译 Debug 版本
cmake --build build --config Debug -j 8
# 编译 Release 版本
cmake --build build --config Release -j 8
# 安装 Debug 版本
cmake --install build --config Debug
# 安装 Release 版本
cmake --install build --config Release
安装并不会把jsoncppd.pdb一同安装在lib目录,因此要手动拷贝jsoncppd.pdb文件。存在jsoncppd.pdb文件的情况下,程序在Debug模式编译时可避免警告。
4.2 linux环境
***注意:***在ubuntu22.04环境中,这个库需要c++17,但是编译指定不生效,需要进如CMakeList.txt中手动修改为c++17。
# 构建
cmake -S . -B build -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX="./jsoncpp_1_9_7" -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release
# 编译
cmake --build build -j 8
# 安装
cmake --install build
5 boost
5.1 windows环境
./bootstrap.bat --with-libraries=all
./b2.exe install --prefix="D:\boost\(安装目录)" --build-type=complete
5.2 linux环境
./bootstrap.sh --with-libraries=all
./b2 install --prefix="~\package\boost_1_79_0(安装目录)" --build-type=complete
6 sqlite_orm
6.1 SQLite3
6.1.1 windows环境
6.1.1.1下载
登录SQLite下载页面:
下载:sqlite-dll-win-x64-3500400.zip
下载:sqlite-tools-win-x64-3500400.zip
下载:sqlite-amalgamation-3500400.zip
6.1.1.2 配置SQLite3
6.1.1.2.1 编译生成sqlite3.lib库
将sqlite-dll-win-x64-3500400.zip解压后,进入Developer Command Prompt for VS 2019 命令窗口,切换到解压文件夹。
文件夹下有两个文件:
- sqlite3.def
- sqlite3.dll
在Developer Command Prompt for VS 2019 命令窗口执行:
lib /def:C:\package\SQLite_3_50_4\sqlite3.def /out:sqlite3.lib /machine:x64
C:\package\SQLite_3_50_4\为sqlite-dll-win-x64-3500400.zip解压文件夹。
生成两个文件:
- sqlite3.exp
- sqlite3.lib
6.1.1.2.2 构建文件目录
将sqlite-tools-win-x64-3500400.zip解压,并将所有文件拷贝到C:\package\SQLite_3_50_4\目录下。
将sqlite-amalgamation-3500400.zip解压。
在C:\package\SQLite_3_50_4\文件夹下新建两个文件夹,include和lib。将sqlite3.lib和sqlite3.exp拷贝到lib文件夹,将*.h文件拷贝到include文件夹。
最终目录结构如下:
- include
- sqlite3.h
- sqlite3ext.h
- lib
- sqlite3.lib
- sqlite3.exp
- sqldiff.exe
- sqlite3.def
- sqlite3.dll
- sqlite3.exe
- sqlite3_analyzer.exe
- sqlite3_rsync.exe
6.1.1 linux环境
sudo apt update
sudo apt install build-essential wget
# 下载、解压
wget https://www.sqlite.org/2025/sqlite-autoconf-3500400.tar.gz
tar -xzvf sqlite-autoconf-3500400.tar.gz
cd sqlite-autoconf-3500400/
./configure --prefix=/home/zbsyb/package/sqlite_3_50_4
make
sudo make install
6.2 sqlite_orm
sqlite_orm只包含一个头文件,不想麻烦只配置头文件即可。
6.2.1 windows环境
# 构建
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="./sqlite_orm_1_9_1" -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DSQLite3_ROOT="C:/package/SQLite_3_50_4(指定SQLite目录)"
# 编译 Release 版本
cmake --build cmake/build --config Release -j 8
# 安装 Release 版本
cmake --install build --config Release
6.2.2 linux环境
# 构建
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="./sqlite_orm_1_9_1" -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DSQLite3_ROOT="~/package/SQLite_3_50_4(指定SQLite目录)"
# 2 编译Release版本(sqlite_orm并不会产生库)
cmake --build build --config Release
# 2 安装Release版本(sqlite_orm并不会产生库)
cmake --install build --config Release
7 hwinfo
7.1 windows环境
# 构建
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="./hwinfo" -DHWINFO_STATIC=ON -DHWINFO_SHARED=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DCMAKE_DEBUG_POSTFIX="d"
# 编译 Debug 版本
cmake --build build --config Debug -j 8
# 编译 Release 版本
cmake --build build --config Release -j 8
# 安装 Debug 版本
cmake --install build --config Debug
# 安装 Release 版本
cmake --install build --config Release
7.2 linux环境
# 构建
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="./hwinfo" -DHWINFO_STATIC=ON -DHWINFO_SHARED=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release
# 编译 Release 版本
cmake --build build -j 8
# 安装 Release 版本
cmake --install build
8 libsodium
8.1 windows环境
项目的github仓库地址。
登录进行网址下载
选择msvc版本的库:libsodium-1.0.18-msvc.zip
解压后获取动态库的libsodium.lib和libsodium.dll(目前压缩包内提供的静态库版本不能正常使用)。
Debug模式下的libsodium.lib名字改为libsodiumd.lib.
最终的构建目录如下:
- include
- sodium.h
- sodium
- core.h
- crypto_aead_aes256gcm.h
- ...
- libd
- libsodium.dll
- libsodium.exp
- libsodium.ilk
- libsodium.lib
- libsodium.pdb
- lib
- libsodium.dll
- libsodium.exp
- libsodium.lib
- libsodium.pdb
可执行文件路径下拷贝libsodium.dll文件和libsodium.pdb文件。
8.2 linux环境
# 下载
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable.tar.gz
# 解压
tar -xzvf libsodium-1.0.18-stable.tar.gz
# 配置(必须指定绝对路路径)
./configure --prefix=/home/zbsyb/package/libsodium_1_0_18
# 编译
make && make check
#安装
sudo make install
9 fmt
9.1 配置
github下载:
git clone https://github.com/fmtlib/fmt.git
9.2 windows环境
# 构建
cmake -S . -B build -DCMAKE_INSTALL_PREFIX="./fmt_11_1_4" -DCMAKE_CONFIGURATION_TYPES="Debug;Release"
# 编译 Debug 版本
cmake --build build --config Debug -j 8
# 编译 Release 版本
cmake --build build --config Release -j 8
# 安装 Debug 版本
cmake --install build --config Debug
# 安装 Release 版本
cmake --install build --config Release
9.3 linux环境
# 构建
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="./fmt_11_1_4"
# 编译
cmake --build build -j 8
# 安装
cmake --install build
linux系统下,库只需要编译安装Release版本即可。
9.4 示例
使用方式分为三种,一种是find_package查询库,一种是链接静态库,另一种是源码编译方式。
C++测试代码如下:
#include <fmt/base.h>
int main() {
fmt::print("Hello, world!\n");
getchar();
return 0;
}
9.4.1 查询库方式
CMake如下:
cmake_minimum_required(VERSION 3.25)
project(fmt-test)
list(APPEND CMAKE_PREFIX_PATH "C:/package/fmt_11_2_0")
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(fmt CONFIG REQUIRED)
message(STATUS "fmt version: ${fmt_VERSION}")
add_executable(${PROJECT_NAME} fmt.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE fmt::fmt)
生成:
# 只生成Debug和Release两种构建方式
cmake -S . -B build -DCMAKE_CONFIGURATION_TYPES="Debug;Release"
编译:
# Debug
cmake --build build --config Debug
# Release
cmake --build build --config Release
9.4.2 库连接
CMake如下:
cmake_minimum_required(VERSION 3.25)
project(fmt-test)
# 设置C++标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(FMT_INC_DIR "C:/package/fmt_11_2_0/include")
set(FMT_LIB_DIR "C:/package/fmt_11_2_0/lib")
add_executable(${PROJECT_NAME} fmt.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE ${FMT_INC_DIR})
target_link_directories(${PROJECT_NAME} PRIVATE ${FMT_LIB_DIR})
target_link_libraries(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:fmtd>
$<$<CONFIG:Release>:fmt>
)
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE /utf-8)
endif()
9.4.3 源码编译
CMake如下:
cmake_minimum_required(VERSION 3.25)
project(fmt-test)
# 设置C++标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#头文件路径
set(DIR "C:/package/fmt_11_2_0/include")
add_executable(${PROJECT_NAME} fmt.cpp)
target_include_directories(${PROJECT_NAME} PRIVATE ${DIR})
if(MSVC)
#MSVC编译器需要编译选项添加/utf-8
target_compile_options(${PROJECT_NAME} PRIVATE /utf-8)
endif()
#必须包含宏FMT_HEADER_ONLY
target_compile_definitions(${PROJECT_NAME} PRIVATE FMT_HEADER_ONLY)
微信
支付宝