如何在Docker容器中安装Azure C++ SDK并解决CMake找不到包问题
解决Azure C++ Blob SDK简易安装&容器适配方案
前置依赖安装(CentOS8环境/容器通用)
首先安装编译所需的系统基础依赖:
RUN dnf install -y gcc-c++ cmake libcurl-devel libuuid-devel openssl-devel && \ dnf clean all
极简源码编译安装流程(无需vcpkg,和常用编译流程完全一致)
以下Dockerfile片段完全匹配你习惯的git克隆+cmake编译安装逻辑,额外做了体积优化处理:
# 1. 安装基础依赖库azure-core-cpp RUN git clone https://github.com/Azure/azure-sdk-for-cpp.git --depth 1 --branch Azure.Core_1.10.3 /tmp/azure-core && \ cd /tmp/azure-core && mkdir -p build && cd build && \ cmake .. -DBUILD_TRANSPORT_CURL=ON -DBUILD_TESTING=OFF && \ cmake --build . --target install -j$(nproc) && \ rm -rf /tmp/azure-core # 2. 安装存储服务公共依赖库azure-storage-common-cpp RUN git clone https://github.com/Azure/azure-sdk-for-cpp.git --depth 1 --branch Azure.Storage.Common_12.5.0 /tmp/azure-storage-common && \ cd /tmp/azure-storage-common/sdk/storage/azure-storage-common && mkdir -p build && cd build && \ cmake .. -DBUILD_TESTING=OFF && \ cmake --build . --target install -j$(nproc) && \ rm -rf /tmp/azure-storage-common # 3. 安装目标Blob SDK库azure-storage-blobs-cpp RUN git clone https://github.com/Azure/azure-sdk-for-cpp.git --depth 1 --branch Azure.Storage.Blobs_12.10.0 /tmp/azure-storage-blobs && \ cd /tmp/azure-storage-blobs/sdk/storage/azure-storage-blobs && mkdir -p build && cd build && \ cmake .. -DBUILD_TESTING=OFF && \ cmake --build . --target install -j$(nproc) && \ rm -rf /tmp/azure-storage-blobs # 刷新动态库缓存 RUN ldconfig
核心优化点:
- 拉取代码时加
--depth 1参数做浅克隆,减少代码拉取体积 - 编译时关闭
BUILD_TESTING参数,跳过测试用例编译,大幅降低编译耗时和临时文件体积 - 每个库编译安装完成后直接删除源码目录,避免残留文件占用存储空间
容器体积进一步优化方案
如果需要更小的容器体积,采用多阶段构建即可:
- 第一阶段使用带编译环境的基础镜像完成所有SDK的编译安装
- 第二阶段使用最小运行时镜像(比如centos:8-minimal),仅拷贝第一阶段编译好的头文件、动态库到运行镜像中,最终镜像体积可以控制在300M以内,比单阶段构建减少至少1G的编译环境占用。
业务CMake项目适配
你的业务代码CMakeLists.txt不需要添加vcpkg的toolchain参数,直接添加以下配置即可正常调用SDK:
find_package(azure-storage-blobs-cpp REQUIRED) target_link_libraries(你的业务二进制名 PRIVATE Azure::azure-storage-blobs)
正常编译即可找到对应库,不会再出现找不到包的错误。
内容的提问来源于stack exchange,提问作者Minathe
相关产品推荐
相关产品推荐

