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;

解决办法:

  1. 前往third_party/abseil-cpp/absl/strings/internal/str_format/extension.h该文件,添加一行代码#include <stdint.h>
  2. 前往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)	
文章作者: 权双
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 程序口袋
C++ C++
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝