解决ALLOCATION_TAG不是Aws::S3::S3Client成员的编译错误
修复AWS SDK C++中
ALLOCATION_TAG not a member "Aws::S3::S3Client"错误 运行代码时出现错误:ALLOCATION_TAG not a member "Aws::S3::S3Client"
相关代码如下:
#include <aws/s3/S3Client.h> #include <aws/s3/model/PutObjectRequest.h> #include <aws/s3/model/ListObjectsV2Request.h> #include <aws/s3/model/GetObjectRequest.h> #include <aws/s3/model/HeadObjectRequest.h> #include <aws/core/auth/AWSCredentials.h> ... Aws::S3::S3Client s3Client(awsCredentials, Aws::MakeShared<Aws::S3::S3EndpointProvider>(Aws::S3::S3Client::ALLOCATION_TAG), awsConfig);
这段代码在同事环境可正常运行,推测问题出在AWS SDK安装流程,我的操作步骤:
- 下载C++开发版Visual Studio
- 打开VS2022开发者命令提示符
- 执行命令:
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp mkdir sdk_build cd sdk_build cmake ..\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="C:\Program Files\aws-cpp-sdk-all" cmake --build . --config=Release cmake --install . --config=Release
已重启电脑但问题未解决,我的CMake配置:
cmake_minimum_required(VERSION 3.23) project(Launcher) set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 14) set(AWSSDK_ROOT "C://Program Files (x86)//aws-cpp-sdk-all") find_package(Qt6 COMPONENTS Widgets Concurrent REQUIRED) find_package(AWSSDK REQUIRED COMPONENTS s3 cognito-idp cognito-identity) add_compile_definitions(AWS_NO_STATIC_IMPL) add_executable(${PROJECT_NAME} ... main.cpp) target_include_directories(${PROJECT_NAME} PRIVATE ${AWSSDK_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PRIVATE ${AWSSDK_LIBRARIES}) target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Widgets Qt6::Concurrent)
修复方案
1. 对齐AWS SDK版本
ALLOCATION_TAG是AWS SDK C++特定版本的成员,不同版本API可能存在变更。先确认同事使用的SDK版本,切换到对应版本重新编译安装:
- 克隆仓库时指定版本标签,例如:
git clone --recurse-submodules --tag 1.11.200 https://github.com/aws/aws-sdk-cpp - 重新执行编译安装流程
2. 修正CMake编译参数冲突
编译命令中同时指定-DCMAKE_BUILD_TYPE=Debug和--config=Release会导致配置冲突,统一构建类型:
- 若需要Debug构建:
cmake ..\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="C:\Program Files\aws-cpp-sdk-all" cmake --build . --config=Debug cmake --install . --config=Debug
- 若需要Release构建:
cmake ..\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="C:\Program Files\aws-cpp-sdk-all" cmake --build . --config=Release cmake --install . --config=Release
3. 统一SDK路径配置
CMake中的AWSSDK_ROOT指向C://Program Files (x86)//aws-cpp-sdk-all,但安装时的CMAKE_PREFIX_PATH是C:\Program Files\aws-cpp-sdk-all,路径不一致会导致链接错误:
- 要么修改CMake配置中的
AWSSDK_ROOT为C://Program Files//aws-cpp-sdk-all - 要么调整安装时的
CMAKE_PREFIX_PATH为C:\Program Files (x86)\aws-cpp-sdk-all
4. 替换ALLOCATION_TAG临时解决
如果暂时无法对齐版本,可以用自定义字符串替代Aws::S3::S3Client::ALLOCATION_TAG,MakeShared的第一个参数仅用于内存分配标记,不影响核心功能:
Aws::S3::S3Client s3Client(awsCredentials, Aws::MakeShared<Aws::S3::S3EndpointProvider>("S3Client"), awsConfig);
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

