

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 开始使用 适用于 C\$1\$1 的 AWS SDK
<a name="getting-started"></a>

适用于 C\$1\$1 的 AWS SDK 是一个模块化、跨平台的开源库，你可以用来连接到 Amazon Web Services。

 适用于 C\$1\$1 的 AWS SDK [CMake](https://cmake.org/)用于支持跨多个域的多个平台，包括视频游戏、系统、移动设备和嵌入式设备。 CMake 是一个构建工具，你可以用它来管理应用程序的依赖关系和创建适合你正在构建的平台的 makefile。 CMake 移除版本中不用于您的平台或应用程序的部分。

在运行代码访问 AWS 资源之前，必须确定代码的身份验证 AWS方式。
+  [AWS 使用 AWS 适用于 C\$1\$1 的 SDK 进行身份验证](credentials.md)

要在代码 适用于 C\$1\$1 的 AWS SDK 中使用，请直接构建 SDK 源代码或使用包管理器获取 SDK 可执行文件。
+  [适用于 C\$1\$1 的 AWS SDK 从源代码获取](sdk-from-source.md)
+  [适用于 C\$1\$1 的 AWS SDK 从包管理器那里获取](sdk-from-pm.md)

如果您遇到与之相关的构建问题 CMake，请参阅[解决 AWS 适用于 C\$1\$1 的 SDK 编译问题](troubleshooting-cmake.md)。

# AWS 使用 AWS 适用于 C\$1\$1 的 SDK 进行身份验证
<a name="credentials"></a>

使用开发 AWS 时，您必须确定您的代码是如何进行身份验证的。 AWS 服务您可以根据环境和可用的访问权限以不同的方式配置对 AWS 资源的编程 AWS 访问权限。有关所有主要身份验证方法的选择以及如何为 SDK 配置[身份验证的指南，请参阅和*工具参考指南中的身份验证AWS SDKs 和*访问](https://docs.aws.amazon.com/sdkref/latest/guide/access.html)。

## 使用控制台凭证
<a name="using-con-creds"></a>

对于本地开发，我们建议新用户使用其现有的 AWS 管理控制台登录凭证以编程方式访问 AWS 服务。在基于浏览器的身份验证流程之后， AWS生成可在本地开发工具（如 CL AWS I 和）上使用的临时证书。 AWS Tools for PowerShell AWS SDKs此功能简化了配置和管理 AWS CLI 凭证的过程，尤其是在您更喜欢交互式身份验证而不是管理长期访问密钥的情况下。

如果您选择此方法，请按照说明使用 AWS CLI 使用控制台凭据登录。有关更多详细信息[，请参阅使用控制台凭据登录进行 AWS 本地开发](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html)。

使用 AWS CLI 进行设置后，[默认凭证提供者链](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/credproviders.html#credproviders-default-credentials-provider-chain)将自动开始使用 AWS CLI 缓存的登录令牌发出请求。

## 使用 IAM Identity Center
<a name="using-iam-id-cent"></a>

此方法包括安装 AWS CLI 以便于配置和定期登录 AWS 访问门户。

 如果您选择此方法，请完成*AWS SDKs 和工具参考指南*[中的 IAM Identity Center 身份验证](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)程序。此后，您的环境应包含以下元素：
+  AWS CLI，用于在运行应用程序之前启动 AWS 访问门户会话。
+ [共享 AWS`config` 文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)，其 `[default]` 配置文件包含一组可从 SDK 中引用的配置值。要查找此文件的位置，请参阅*AWS SDKs 和工具参考指南*中的[共享文件的位置](https://docs.aws.amazon.com/sdkref/latest/guide/file-location.html)。
+  共享 `config` 文件设置了 [https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html](https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html) 设置。这将设置 SDK 用于 AWS 请求的默认值 AWS 区域 。此区域用于未指定使用区域的 SDK 服务请求。
+  在向 AWS发送请求之前，SDK 使用配置文件的 [SSO 令牌提供程序配置](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#feature-sso-credentials-profile)来获取凭证。该`sso_role_name`值是与 IAM Identity Center 权限集关联的 IAM 角色，应允许访问您的应用程序中 AWS 服务 使用的权限。

  以下示例 `config` 文件展示了使用 SSO 令牌提供程序配置来设置的默认配置文件。配置文件的 `sso_session` 设置是指所指定的 [`sso-session` 节](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#section-session)。该`sso-session`部分包含启动 AWS 访问门户会话的设置。

  ```
  [default]
  sso_session = my-sso
  sso_account_id = 111122223333
  sso_role_name = SampleRole
  region = us-east-1
  output = json
  
  [sso-session my-sso]
  sso_region = us-east-1
  sso_start_url = https://provided-domain.awsapps.com/start
  sso_registration_scopes = sso:account:access
  ```

 适用于 C\$1\$1 的 AWS SDK 无需向您的应用程序添加其他软件包（例如`SSO`和`SSOOIDC`）即可使用 IAM Identity Center 身份验证。

### 启动 AWS 访问门户会话
<a name="accessportal"></a>

在运行可访问的应用程序之前 AWS 服务，您需要为软件开发工具包进行有效的 AWS 访问门户会话，才能使用 IAM Identity Center 身份验证来解析证书。根据配置的会话时长，访问权限最终将过期，并且开发工具包将遇到身份验证错误。要登录 AWS 访问门户，请在中运行以下命令 AWS CLI。

```
aws sso login
```

由于您有默认的配置文件设置，因此无需使用 `--profile` 选项调用该命令。如果您的 SSO 令牌提供程序配置在使用指定的配置文件，则命令为 `aws sso login --profile named-profile`。

要测试是否已有活动会话，请运行以下 AWS CLI 命令。

```
aws sts get-caller-identity
```

对此命令的响应应该报告共享 `config` 文件中配置的 IAM Identity Center 账户和权限集。

**注意**  
如果您已经有一个有效的 AWS 访问门户会话并且`aws sso login`正在运行，则无需提供凭据。  
登录过程可能会提示您允许 AWS CLI 访问您的数据。由于 AWS CLI 是在适用于 Python 的 SDK 之上构建的，因此权限消息可能包含`botocore`名称的变体。

## 更多身份验证信息
<a name="credother"></a>

人类用户，也称为*人类身份*，是应用程序的人员、管理员、开发人员、操作员和使用者。他们必须具有身份才能访问您的 AWS 环境和应用程序。作为组织成员的人类用户（即您、开发人员）也称为“工作人员身份”**。访问时使用临时证书 AWS。您可以为人类用户使用身份提供商，通过扮演提供临时证书的角色来提供对 AWS 账户的联合访问权限。为了实现集中访问管理，我们建议您使用 AWS IAM Identity Center （IAM Identity Center）来管理账户的访问权限以及这些账户内的权限。有关更多替代方案，请参阅以下内容：
+ 有关最佳实践的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 要创建短期 AWS 证书，请参阅 *IAM 用户指南*中的[临时安全证书](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。
+ 要了解其他 适用于 C\$1\$1 的 AWS SDK 凭证提供商，请参阅《*工具参考*指南》AWS SDKs 中的[标准化凭证提供商](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html)。

# 适用于 C\$1\$1 的 AWS SDK 从源代码获取
<a name="sdk-from-source"></a>

您可以先 适用于 C\$1\$1 的 AWS SDK 从源代码构建 SDK，然后将其安装到本地，从而使用代码中的。


**过程概述**  

| 一般流程  | 详细流程 | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sdk-for-cpp/v1/developer-guide/sdk-from-source.html) |  首先从源代码构建 SDK 并安装它。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sdk-for-cpp/v1/developer-guide/sdk-from-source.html) | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sdk-for-cpp/v1/developer-guide/sdk-from-source.html) |  然后使用 SDK 开发自己的应用程序。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/sdk-for-cpp/v1/developer-guide/sdk-from-source.html)  | 

# 适用于 C\$1\$1 的 AWS SDK 在 Windows 上构建
<a name="setup-windows"></a>

要进行设置 适用于 C\$1\$1 的 AWS SDK，您可以直接从源代码自行构建 SDK，也可以使用包管理器下载库。



SDK 源代码按服务划分为单独的程序包。安装整个 SDK 最多可能需要一个小时。仅安装程序使用的特定服务子集可以缩短安装时间，还可以减小所需磁盘空间。若要选择安装哪些服务，您需要知道程序所使用的每个服务的程序包名称。你可以在[https://github.com/aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)上查看软件包目录列表 GitHub。程序包名称是服务目录名称的后缀。

```
aws-sdk-cpp\aws-cpp-sdk-<packageName>   # Repo directory name and packageName
aws-sdk-cpp\aws-cpp-sdk-s3              # Example: Package name is s3
```

## 先决条件
<a name="prerequisites"></a>

要构建一些较大的 AWS 客户端，您至少需要 4 GB 的 RAM。由于内存不足，该 SDK 可能无法在 Amazon EC2 实例类型 *t2.micro*、*t2.small* 和其他小型实例类型上构建。

要使用 适用于 C\$1\$1 的 AWS SDK，您需要满足以下条件之一：
+ Microsoft Visual Studio 2015 或更高版本，
+  GNU 编译器集合（GCC）4.9 或更高版本，或
+  Clang 3.3 或更高版本。

## 使用 curl 构建适用于 Windows 的 SDK
<a name="build-curl-id"></a>

在 Windows 上，SDK 是使用 [WinHTTP](https://msdn.microsoft.com/en-us/library/windows/desktop/aa382925%28v=vs.85%29.aspx) 作为默认 HTTP 客户端构建的。但是，WinHTTP 1.0 不支持 HTTP/2 双向直播，这是 Amazon Transcribe 和 AWS 服务 Amazon Lex 等某些内容所必需的。因此，有时需要使用 SDK 构建 curl 支持。要查看所有可用的 curl 下载选项，请参阅 [curl 版本和下载](https://curl.se/download.html)。以下是构建支持 curl 的 SDK 的一种方法：

**构建支持 curl 库的 SDK**

1. 导航到 [Windows 版 curl](https://curl.se/windows/) 并下载适用于 Microsoft Windows 的 curl 二进制程序包。

1. 例如，将程序包提取到您计算机上的某个文件夹中，例如 `C:\curl`。

1. 导航到[从 Mozilla 提取的 CA 证书](http://curl.haxx.se/docs/caextract.html)并下载 `cacert.pem` 文件。此隐私增强邮件（PEM）文件包含一套有效的数字证书，用于验证安全网站的真实性。证书由证书颁发机构 (CA) 公司分发，例如 GlobalSign 和威瑞信。

1. 例如，将 `cacert.pem` 文件移至您在上一步解压缩的 `bin` 子文件夹中，例如 `C:\curl\bin`。将该文件重命名为 `curl-ca-bundle.crt`。

此外，Microsoft Build Engine (MSBuild) 必须能够在接下来的步骤`dll`中找到卷曲。因此，您应该将 curl `bin` 文件夹路径添加到 Windows `PATH` 环境变量中，例如 `set PATH=%PATH%;C:\curl\bin`。每次打开新命令提示符来构建 SDK 时，都必须添加此路径。或者，您可以在 Windows 系统设置中全局配置环境变量，以便记住该设置。

在接下来的步骤中*从源代码构建 SDK* 时，请参阅步骤 5（生成构建文件），了解使用 curl 构建 SDK 所需的命令语法。

编写代码时，必须将[在代码中配置适用于 C\$1\$1 的 AWS SDK 服务客户端](client-config.md)中的 `caFile` 设置为证书文件所在位置。有关使用 Amazon Transcribe 的示例，请参阅[https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/transcribe-streaming](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/transcribe-streaming)上的 “*AWS 代码示例存储库*”。 GitHub

## 从源代码构建 SDK
<a name="setup-windows-from-source"></a>

您可以使用命令行工具从源代码构建 SDK。使用此方法，您可以自定义 SDK 构建。有关可用选项的信息，请参阅[CMake 参数](cmake-params.md)。下面是三个主要步骤。首先，使用生成文件 CMake。其次，你 MSBuild 用来构建适用于你的操作系统的 SDK 二进制文件并构建工具链。第三步，您将二进制文件安装或复制到开发计算机上的正确位置。

**从源代码构建 SDK**

1. 安装 [CMake](https://cmake.org/)（最低版本 3.13）和适用于您平台的相关构建工具。建议将 `cmake` 添加到您的 `PATH`。要查看您的版本 CMake，请打开命令提示符并运行命令 **cmake --version**

1. 在命令提示符下，导航至希望存储 SDK 的文件夹。

1. 获取最新源代码。

   版本 1.11 使用 git 子模块来封装外部依赖项。这包括《工具参考指南》*AWS SDKs 和《工具参考指南*》中描述的 [CRT 库](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html)。

   从以下位置下载或克隆 SDK 源[https://github.com/aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)代码 GitHub：
   + 使用 Git 克隆：HTTPS

     ```
     git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
     ```
   + 使用 Git 克隆：SSH

     ```
     git clone --recurse-submodules git@github.com:aws/aws-sdk-cpp.git
     ```

1. 建议您将生成的构建文件存储在 SDK 源目录之外。创建一个用于存储构建文件的新目录并导航到该文件夹。

   ```
   mkdir sdk_build
   cd sdk_build
   ```

1. 通过运行 `cmake` 生成构建文件。在 `cmake` 命令行上指定是编译*调试*版还是*发布*版本。在此过程中选择 `Debug` 以运行应用程序代码的调试配置。在此过程中选择 `Release` 以运行应用程序代码的发布配置。对于 Windows，SDK 安装位置通常为 `\Program Files (x86)\aws-cpp-sdk-all\`。命令语法：

   `{path to cmake if not in PATH} {path to source location of aws-sdk-cpp} -DCMAKE_BUILD_TYPE=[Debug | Release] -DCMAKE_PREFIX_PATH={path to install destination}`

   有关修改编译输出的更多方法，请参阅[CMake参数](cmake-params.md)。

   要生成构建文件，请执行以下操作之一：
   + **生成构建文件（全部 AWS 服务）**：要构建整个 SDK，请运行 cmake，指定是编译*调试*版本还是*发布*版本。例如：

     ```
     cmake "..\aws-sdk-cpp" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH="C:\Program Files (x86)\aws-cpp-sdk-all"
     ```

     
   + **生成构建文件（子集 AWS 服务）**：要仅为 SDK 生成一个或多个特定的服务包，请添加 CMake [BUILD\$1ONLY](cmake-params.md#cmake-build-only)参数，服务名称用分号分隔。以下示例仅构建 Amazon S3 服务包：

     ```
     cmake ..\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DBUILD_ONLY="s3" -DCMAKE_PREFIX_PATH="C:\Program Files (x86)\aws-cpp-sdk-all"
     ```
   + **生成构建文件（使用 curl）**：满足 curl 先决条件后，还需要另外三个 cmake 命令行选项才能在 SDK 中支持 curl：[FORCE\$1CURL](cmake-params.md#cmake-force-curl)、[CURL\$1INCLUDE\$1DIR](cmake-params.md#cmake-curl-include-dir) 和 [CURL\$1LIBRARY](cmake-params.md#cmake-curl-library)。例如：

     ```
     cmake ..\aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DFORCE_CURL=ON -DCURL_INCLUDE_DIR='C:/curl/include'
           -DCURL_LIBRARY='C:/curl/lib/libcurl.dll.a' -DCMAKE_PREFIX_PATH="C:\Program Files (x86)\aws-cpp-sdk-all"
     ```
**注意**  
如果出现错误 “无法构建第三方库”，请 CMake 通过运行来检查您的版本**cmake --version**。您必须使用 CMake 最低版本 3.13。

1. 构建 SDK 二进制文件。如果您要构建整个 SDK，则此步骤可能需要一小时或更长时间。命令语法：

   `{path to cmake if not in PATH} --build . --config=[Debug | Release]`

   ```
   cmake --build . --config=Debug
   ```
**注意**  
如果您遇到错误 The code execution cannot proceed ... dll not found. Reinstalling the program may fix this problem，请重试 `cmake` 命令。

1. 使用**管理员**权限打开命令提示符，将 SDK 安装在之前使用 `CMAKE_PREFIX_PATH` 参数指定的位置。命令语法：

   `{path to cmake if not in PATH} --install . --config=[Debug | Release]`

   ```
   cmake --install . --config=Debug
   ```

## 在 Windows 上为 Android 系统构建
<a name="building-for-android"></a>

要针对 Android 进行构建，请将 `-DTARGET_ARCH=ANDROID` 添加到 `cmake` 命令行中。 适用于 C\$1\$1 的 AWS SDK 包括一个 CMake 工具链文件，该文件通过引用相应的环境变量 () `ANDROID_NDK` 来包含您需要的内容。

要在 Windows 上构建适用于 Android 的 SDK，您需要在 Visual Studio（2015 或更高版本）的开发者命令提示符下运行 `cmake`。您还需要安装 [NMAKE](https://docs.microsoft.com/en-us/cpp/build/reference/nmake-reference?view=msvc-160)，并在您的路径中安装命令 **`git`** 和 **`patch`**。如果您已经在 Windows 系统上安装了 git，很可能会在同级目录（`.../Git/usr/bin/`）中找到 **`patch`**。验证这些要求后，您的 `cmake` 命令行将稍作更改以使用 NMAKE。

```
cmake -G "NMake Makefiles" `-DTARGET_ARCH=ANDROID` <other options> ..
```

NMAKE 是连续构建的。为了加快构建速度，建议您安装 JOM 作为 NMAKE 的替代方案，然后按如下方式更改 `cmake` 调用：

```
cmake -G "NMake Makefiles JOM" `-DTARGET_ARCH=ANDROID` <other options> ..
```

有关示例应用程序，请参阅使用以下命令[设置 Android 应用程序 适用于 C\$1\$1 的 AWS SDK](https://aws.amazon.com/blogs/developer/setting-up-an-android-application-with-aws-sdk-for-c/)

# 适用于 C\$1\$1 的 AWS SDK 在 Linux/macOS 上构建
<a name="setup-linux"></a>

要进行设置 适用于 C\$1\$1 的 AWS SDK，您可以直接从源代码自行构建 SDK，也可以使用包管理器下载库。



SDK 源代码按服务划分为单独的程序包。安装整个 SDK 最多可能需要一个小时。仅安装程序使用的特定服务子集可以缩短安装时间，还可以减小所需磁盘空间。若要选择安装哪些服务，您需要知道程序所使用的每个服务的程序包名称。你可以在[https://github.com/aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)上查看软件包目录列表 GitHub。程序包名称是服务目录名称的后缀。

```
aws-sdk-cpp\aws-cpp-sdk-<packageName>   # Repo directory name and packageName
aws-sdk-cpp\aws-cpp-sdk-s3              # Example: Package name is s3
```

## 先决条件
<a name="prerequisites"></a>

要构建一些较大的 AWS 客户端，您至少需要 4 GB 的 RAM。由于内存不足，该 SDK 可能无法在 Amazon EC2 实例类型 *t2.micro*、*t2.small* 和其他小型实例类型上构建。

要使用 适用于 C\$1\$1 的 AWS SDK，您需要满足以下条件之一：
+  GNU 编译器集合（GCC）4.9 或更高版本，或
+  Clang 3.3 或更高版本。

## 针对 Linux 系统的其他要求
<a name="additional-requirements-for-linux-systems"></a>

您必须为 `libcurl`、`libopenssl`、`libuuid`、`zlib` 添加标头文件（`-dev` 程序包），并为 Amazon Polly 支持添加 `libpulse`（可选）。您可以使用系统的程序包管理器查找程序包。

**在*基于 Debian/Ubuntu 的系统*上安装程序包**
+ 

  ```
  sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev zlib1g-dev libpulse-dev
  ```

**在*Linux/Redhat/Fedora/CentOS基于 Amazon 的系统*上安装软件包**
+ 

  ```
  sudo yum install libcurl-devel openssl-devel libuuid-devel pulseaudio-libs-devel
  ```

## 从源代码构建 SDK
<a name="setup-linux-from-source"></a>

除了使用 vcpkg 之外，您也可以使用命令行工具从源代码构建 SDK。使用此方法，您可以自定义 SDK 构建。有关可用选项的信息，请参阅[CMake 参数](cmake-params.md)。

**从源代码构建 SDK**

1. 安装 [CMake](https://cmake.org/)（最低版本 3.13）和适用于您平台的相关构建工具。建议将 `cmake` 添加到您的 `PATH`。要查看您的版本 CMake，请打开命令提示符并运行命令 **cmake --version**

1. 在命令提示符下，导航至希望存储 SDK 的文件夹。

1. 获取最新源代码。

   版本 1.11 使用 git 子模块来封装外部依赖项。这包括《工具参考指南》*AWS SDKs 和《工具参考指南*》中描述的 [CRT 库](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html)。

   从以下位置下载或克隆 SDK 源[https://github.com/aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)代码 GitHub：
   + 使用 Git 克隆：HTTPS

     ```
     git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp
     ```
   + 使用 Git 克隆：SSH

     ```
     git clone --recurse-submodules git@github.com:aws/aws-sdk-cpp.git
     ```

1. 建议您将生成的构建文件存储在 SDK 源目录之外。创建一个用于存储构建文件的新目录并导航到该文件夹。

   ```
   mkdir sdk_build
   cd sdk_build
   ```

1. 通过运行 `cmake` 生成构建文件。在 `cmake` 命令行上指定是编译*调试*版还是*发布*版本。在此过程中选择 `Debug` 以运行应用程序代码的调试配置。在此过程中选择 `Release` 以运行应用程序代码的发布配置。命令语法：

   `{path to cmake if not in PATH} {path to source location of aws-sdk-cpp} -DCMAKE_BUILD_TYPE=[Debug | Release] -DCMAKE_PREFIX_PATH={path to install} -DCMAKE_INSTALL_PREFIX={path to install}`

   有关修改编译输出的更多方法，请参阅[CMake参数](cmake-params.md)。
**注意**  
在文件系统不区分大小写的 Mac 上构建时，请在运行构建版本的目录中检查 `pwd` 命令的输出。确保 `pwd` 输出中的目录名称使用大小写混合形式，例如 `/Users` 和 `Documents`。

   要生成构建文件，请执行以下操作之一：
   + **生成构建文件（全部 AWS 服务）**：要构建整个 SDK，请运行 cmake，指定是编译*调试*版本还是*发布*版本。例如：

     ```
     cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/
     ```

     
   + **生成构建文件（子集 AWS 服务）**：要仅为 SDK 生成一个或多个特定的服务包，请添加 CMake [BUILD\$1ONLY](cmake-params.md#cmake-build-only)参数，服务名称用分号分隔。以下示例仅构建 Amazon S3 服务包：

     ```
     cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_ONLY="s3"
     ```
**注意**  
如果出现错误 “无法构建第三方库”，请 CMake 通过运行来检查您的版本**cmake --version**。必须使用 CMake 最低版本 3.13。

1. 构建 SDK 二进制文件。如果您要构建整个 SDK，则此操作可能需要一小时或更长时间。

   ```
   cmake --build . --config=Debug
   ```

1. 安装 SDK。根据您选择的安装位置，您可能需要升级权限。

   ```
   cmake --install . --config=Debug
   ```

## 在 Linux 上为 Android 系统构建
<a name="building-for-android"></a>

要针对 Android 进行构建，请将 `-DTARGET_ARCH=ANDROID` 添加到 `cmake` 命令行中。 适用于 C\$1\$1 的 AWS SDK 包括一个 CMake 工具链文件，该文件通过引用相应的环境变量 () `ANDROID_NDK` 来包含您需要的内容。有关示例应用程序，请参阅使用以下命令[设置 Android 应用程序 适用于 C\$1\$1 的 AWS SDK](https://aws.amazon.com/blogs/developer/setting-up-an-android-application-with-aws-sdk-for-c/)

# 使用适用于 C\$1\$1 的 AWS SDK 创建简单应用程序
<a name="build-cmake"></a>

 [CMake](https://cmake.org/)是一种构建工具，用于管理应用程序的依赖关系和创建适合您正在构建的平台的 makefile。您可以使用 CMake 创建和生成项目 适用于 C\$1\$1 的 AWS SDK。

此示例报告您拥有的 Amazon S3 存储桶。在此示例中，您的 AWS 账户中不需要 Amazon S3 存储桶，但如果您至少有一个存储桶，那会更有趣。如果您还没有存储桶，请参阅《Amazon Simple Storage Service 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)。

## 第 1 步：编写代码
<a name="setting-up-a-cmake-project"></a>

此示例由一个文件夹（包含一个源文件 [`hello_s3.cpp`]）和一个 `CMakeLists.txt` 文件组成。该程序使用 Amazon S3 来报告存储桶信息。此代码也可在上的[AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/hello_s3)中找到 GitHub。

可以在 `CMakeLists.txt` 构建配置文件中设置许多选项。有关更多信息，请参阅 CMake 网站上的[CMake教程](https://cmake.org/cmake-tutorial/)。

**注意**  
深度探索：设置 `CMAKE_PREFIX_PATH`  
默认情况下，macOS、Linux、安卓和其他非 Windows 平台 适用于 C\$1\$1 的 AWS SDK 上的，安装在 Windows 上`/usr/local`，安装在 Windows 上。`\Program Files (x86)\aws-cpp-sdk-all`  
当你将 AWS SDK 安装到这些标准位置时， CMake 会自动找到必要的资源。但是，如果您将 AWS SDK 安装到自定义位置，则必须告诉 CMake 在哪里可以找到构建 SDK 时产生的以下资源：  
`AWSSDKConfig.cmake`：一个配置文件，用于说明 CMake 如何在项目中查找和使用 AWS SDK 库。如果没有此文件， CMake则无法找到 AWS SDK 头文件、链接到 AWS SDK 库或设置正确的编译器标志。
（适用于版本 1.8 及更早版本）依赖项的位置：`aws-c-event-stream`、`aws-c-common`、`aws-checksums`
要设置自定义安装路径，请执行以下操作：  

```
cmake -DCMAKE_PREFIX_PATH=/path/to/your/aws-sdk-installation /path/to/project/you/are/building
```
如果您未设置自定义安装，则在 CMake 尝试在中`CMAKE_PREFIX_PATH`进行处理时，您的构建将失败，并显示诸如 AWSSDK “找不到” 之类`find_package(AWSSDK)`的错误`CMakeLists.txt`。

**注意**  
深入探索：Windows 运行时库  
要运行您的程序，需要 DLLs 在程序的可执行文件位置放置几个：`aws-c-common.dll``aws-c-event-stream.dll`、`aws-checksums.dll`、`aws-cpp-sdk-core.dll`、，以及任何 DLLs 基于程序组件的特定内容（此示例还需要，`aws-cpp-sdk-s3`因为它使用了 Amazon S3）。`CMakeLists.txt`文件中的第二条`if`语句将这些库从安装位置复制到可执行位置，以满足此要求。 `AWSSDK_CPY_DYN_LIBS`是由定义的宏 适用于 C\$1\$1 的 AWS SDK ，用于将 SDK DLLs 从安装位置复制到程序的可执行位置。如果 DLLs 它们不在可执行文件位置，则会出现 “找不到文件” 的运行时异常。如果您遇到这些错误，请查看 `CMakeLists.txt` 文件的这一部分，了解您的独特环境是否需要进行必要的更改。

**创建文件夹和源文件**

1. 创建一个`hello_s3`目录 and/or 项目来保存您的源文件。
**注意**  
要在 Visual Studio 中完成此示例，请执行以下操作：选择 “**创建新项目**”，然后选择 “**CMake 项目**”。将项目命名为 `hello_s3`。`CMakeLists.txt` 文件中会使用此项目名称。

1. 在该文件夹中，添加一个包含以下代码的 `hello_s3.cpp` 文件，该代码将报告您拥有的 Amazon S3 存储桶。

   ```
   #include <aws/core/Aws.h>
   #include <aws/s3/S3Client.h>
   #include <iostream>
   #include <aws/core/auth/AWSCredentialsProviderChain.h>
   using namespace Aws;
   using namespace Aws::Auth;
   
   /*
    *  A "Hello S3" starter application which initializes an Amazon Simple Storage Service (Amazon S3) client
    *  and lists the Amazon S3 buckets in the selected region.
    *
    *  main function
    *
    *  Usage: 'hello_s3'
    *
    */
   
   int main(int argc, char **argv) {
       Aws::SDKOptions options;
       // Optionally change the log level for debugging.
   //   options.loggingOptions.logLevel = Utils::Logging::LogLevel::Debug;
       Aws::InitAPI(options); // Should only be called once.
       int result = 0;
       {
           Aws::Client::ClientConfiguration clientConfig;
           // Optional: Set to the AWS Region (overrides config file).
           // clientConfig.region = "us-east-1";
                  
           // You don't normally have to test that you are authenticated. But the S3 service permits anonymous requests, thus the s3Client will return "success" and 0 buckets even if you are unauthenticated, which can be confusing to a new user. 
           auto provider = Aws::MakeShared<DefaultAWSCredentialsProviderChain>("alloc-tag");
           auto creds = provider->GetAWSCredentials();
           if (creds.IsEmpty()) {
               std::cerr << "Failed authentication" << std::endl;
           }
   
           Aws::S3::S3Client s3Client(clientConfig);
           auto outcome = s3Client.ListBuckets();
   
           if (!outcome.IsSuccess()) {
               std::cerr << "Failed with error: " << outcome.GetError() << std::endl;
               result = 1;
           } else {
               std::cout << "Found " << outcome.GetResult().GetBuckets().size()
                         << " buckets\n";
               for (auto &bucket: outcome.GetResult().GetBuckets()) {
                   std::cout << bucket.GetName() << std::endl;
               }
           }
       }
   
       Aws::ShutdownAPI(options); // Should only be called once.
       return result;
   }
   ```

1. 添加一个 `CMakeLists.txt` 文件，指定项目名称、可执行文件、源文件和链接库。

   ```
   # Set the minimum required version of CMake for this project.
   cmake_minimum_required(VERSION 3.13)
   
   # Set the AWS service components used by this project.
   set(SERVICE_COMPONENTS s3)
   
   # Set this project's name.
   project("hello_s3")
   
   # Set the C++ standard to use to build this target.
   # At least C++ 11 is required for the AWS SDK for C++.
   set(CMAKE_CXX_STANDARD 11)
   
   # Use the MSVC variable to determine if this is a Windows build.
   set(WINDOWS_BUILD ${MSVC})
   
   if (WINDOWS_BUILD) # Set the location where CMake can find the installed libraries for the AWS SDK.
       string(REPLACE ";" "/aws-cpp-sdk-all;" SYSTEM_MODULE_PATH "${CMAKE_SYSTEM_PREFIX_PATH}/aws-cpp-sdk-all")
       list(APPEND CMAKE_PREFIX_PATH ${SYSTEM_MODULE_PATH})
   endif ()
   
   # Find the AWS SDK for C++ package.
   find_package(AWSSDK REQUIRED COMPONENTS ${SERVICE_COMPONENTS})
   
   if (WINDOWS_BUILD AND AWSSDK_INSTALL_AS_SHARED_LIBS)
       # Copy relevant AWS SDK for C++ libraries into the current binary directory for running and debugging.
   
       # set(BIN_SUB_DIR "/Debug") # if you are building from the command line you may need to uncomment this
       # and set the proper subdirectory to the executables' location.
   
       AWSSDK_CPY_DYN_LIBS(SERVICE_COMPONENTS "" ${CMAKE_CURRENT_BINARY_DIR}${BIN_SUB_DIR})
   endif ()
   
   add_executable(${PROJECT_NAME}
           hello_s3.cpp)
   
   target_link_libraries(${PROJECT_NAME}
           ${AWSSDK_LINK_LIBRARIES})
   ```

## 第 2 步：使用 CMake
<a name="building-with-cmake"></a>

CMake 使用中的信息`CMakeLists.txt`来生成可执行程序。

建议您按照所用 IDE 的标准做法来构建此应用程序。

**使用命令行构建应用程序**

1. 创建一个目录，**`cmake`** 将在其中构建您的应用程序。

   ```
   mkdir my_project_build
   ```

1. 切换到构建目录并使用项目源代码目录的路径运行 **`cmake`**。

   ```
   cd my_project_build
   cmake ../
   ```

1. **`cmake`** 生成构建目录后，您可以使用 **`make`**（在 Windows 上为 **`nmake`**）或 MSBUILD（`msbuild ALL_BUILD.vcxproj` 或 `cmake --build . --config=Debug`）来构建应用程序。

## 步骤 3：运行
<a name="run-app"></a>

运行此应用程序时，它会显示控制台输出，其中会列出 Amazon S3 存储桶的总数和每个存储桶的名称。

建议您按照所用 IDE 的标准做法来运行此应用程序。

**注意**  
请记得登录！如果您使用 IAM 身份中心进行身份验证，请记住使用 AWS CLI `aws sso login`命令登录。

**通过命令行运行程序**

1. 切换到生成构建结果的 Debug 目录。

1. 使用可执行文件的名称运行该程序。

   ```
   hello_s3
   ```

有关使用的其他示例 适用于 C\$1\$1 的 AWS SDK，请参阅[AWS 服务 使用适用于 C\$1\$1 的 AWS SDK 进行调用的指导示例](programming-services.md)。

# 适用于 C\$1\$1 的 AWS SDK 从包管理器那里获取
<a name="sdk-from-pm"></a>

**重要**  
如果您使用的是 homebrew 或 vcpkg 等程序包管理器：  
将适用于 C\$1\$1 的 SDK 更新到新版本后，必须重新编译依赖于该 SDK 的任何库或可执行文件。

要进行设置 适用于 C\$1\$1 的 AWS SDK，您可以直接从源代码自行构建 SDK，也可以使用包管理器下载库。



SDK 源代码按服务划分为单独的程序包。安装整个 SDK 最多可能需要一个小时。仅安装程序使用的特定服务子集可以缩短安装时间，还可以减小所需磁盘空间。若要选择安装哪些服务，您需要知道程序所使用的每个服务的程序包名称。你可以在[https://github.com/aws/aws-sdk-cpp](https://github.com/aws/aws-sdk-cpp)上查看软件包目录列表 GitHub。程序包名称是服务目录名称的后缀。

```
aws-sdk-cpp\aws-cpp-sdk-<packageName>   # Repo directory name and packageName
aws-sdk-cpp\aws-cpp-sdk-s3              # Example: Package name is s3
```

## 先决条件
<a name="prerequisites"></a>

要构建一些较大的 AWS 客户端，您至少需要 4 GB 的 RAM。由于内存不足，该 SDK 可能无法在 Amazon EC2 实例类型 *t2.micro*、*t2.small* 和其他小型实例类型上构建。

------
#### [ Linux/macOS ]

要 适用于 C\$1\$1 的 AWS SDK 在 Linux/macOS 上使用，你需要满足以下条件之一：
+  GNU 编译器集合（GCC）4.9 或更高版本，或
+  Clang 3.3 或更高版本。

------
#### [ Windows ]

要 适用于 C\$1\$1 的 AWS SDK 在 Windows 上使用，你需要满足以下条件之一：
+ Microsoft Visual Studio 2015 或更高版本，
+  GNU 编译器集合（GCC）4.9 或更高版本，或
+  Clang 3.3 或更高版本。

------

## 使用 vcpkg 获取 SDK
<a name="setupwin-with-vcpkg"></a>

**重要**  
可用的 vcpkg 发行版由外部贡献者支持，不是通过提供的。 AWS最新版本始终可以通过[从源代码安装](sdk-from-source.md)获得。

[vcpkg](https://github.com/Microsoft/vcpkg) 是由外部贡献者更新和维护的程序包管理器。请注意，此软件包管理器不是通过提供的 AWS ，可能无法反映最新的可用版本 适用于 C\$1\$1 的 AWS SDK。从发布版本到通过外部软件包管理器发布版本之间存在延迟。 AWS 最新版本始终可以通过[从源代码安装](sdk-from-source.md)获得。

您必须在您的系统上安装 [vcpkg](https://github.com/Microsoft/vcpkg)。
+ 按照 [vcpkg](https://github.com/Microsoft/vcpkg) 自 GitHub 述文件中的说明下载并启动 vcpkg，在出现提示时替换以下选项：
  + 

    作为这些操作指南的一部分，系统会引导您输入以下内容：

    ```
    .\vcpkg\vcpkg install [packages to install]
    ```

    要安装整个 SDK，请输入 `.\vcpkg\vcpkg install "aws-sdk-cpp[*]" --recurse` 或仅指明要安装的 SDK 的特定服务，方法是在方括号中提供程序包名称，例如，`.\vcpkg\vcpkg install "aws-sdk-cpp[s3, ec2]" --recurse`

  输出会显示一条消息，包括以下内容：

  ```
  CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake"
  ```
+ 复制完整的`-DCMAKE_TOOLCHAIN_FILE`命令以备 CMake日后使用。vcpkg GitHub Readme 还会说明如何将其用于您的工具集。
+ 您可能还需要记下通过 vcpkg 安装的构建配置类型。控制台输出显示了构建配置和 SDK 的版本。以下示例输出表明编译配置为 “x86-windows”，安装的 适用于 C\$1\$1 的 AWS SDK 版本为 1.8。

  ```
  The following packages will be built and installed:
      aws-sdk-cpp[core,dynamodb,kinesis,s3]:x86-windows -> 1.8.126#6
  ```

安装之后 适用于 C\$1\$1 的 AWS SDK，您可以使用 SDK 开发自己的应用程序。[创建简单的应用程序](build-cmake.md)中显示的示例报告了您拥有的 Amazon S3 存储桶。

# 解决 AWS 适用于 C\$1\$1 的 SDK 编译问题
<a name="troubleshooting-cmake"></a>

在构建 f 适用于 C\$1\$1 的 AWS SDK rom 源代码时，可能会出现以下一些常见的构建问题。

**Topics**
+ [CMake 错误：找不到 “AWSSDK” 提供的软件包配置文件](#could-not-find-package)
+ [CMake 错误：找不到加载文件（而且你使用的是 SDK 版本 1.8）](#could-not-load-file)
+ [CMake 错误：找不到加载文件](#could-not-load-file2)
+ [运行时错误：找不到 `aws-*.dll`，无法继续](#dll-was-not-found)

## CMake 错误：找不到 “AWSSDK” 提供的软件包配置文件
<a name="could-not-find-package"></a>

CMake 如果找不到已安装的 SDK，则会引发以下错误。

```
1> [CMake] CMake Error at C:\CodeRepos\CMakeProject1\CMakeLists.txt:4 (find_package):
1> [CMake]   Could not find a package configuration file provided by "AWSSDK" with any
1> [CMake]   of the following names:
1> [CMake] 
1> [CMake]     AWSSDKConfig.cmake
1> [CMake]     awssdk-config.cmake
1> [CMake] 
1> [CMake]   Add the installation prefix of "AWSSDK" to CMAKE_PREFIX_PATH or set
1> [CMake]   "AWSSDK_DIR" to a directory containing one of the above files.  If "AWSSDK"
1> [CMake]   provides a separate development package or SDK, be sure it has been
1> [CMake]   installed.
```

要解决此错误，请告诉 CMake 在哪里可以找到已安装的 SDK（例如，安装 SDK 时生成的文件夹（[Windows](setup-windows.md)、[Linux/m](setup-linux.md) acOS）。在 `CMakeLists.txt` 文件中首次调用 `find_package()` 之前，插入以下命令。有关示例，请参阅 [使用适用于 C\$1\$1 的 AWS SDK 创建简单应用程序](build-cmake.md)。

```
list(APPEND CMAKE_PREFIX_PATH "C:\\Program Files (x86)\\aws-cpp-sdk-all\\lib\\cmake")
```

## CMake 错误：找不到加载文件（而且你使用的是 SDK 版本 1.8）
<a name="could-not-load-file"></a>

CMake 如果找不到已安装的库，则会引发以下错误。

```
1> [CMake]   include could not find load file:
1> [CMake] 
1> [CMake]     C:/Program Files (x86)/aws-cpp-sdk-all/lib/aws-c-common/cmake/static/aws-c-common-targets.cmake

1> [CMake]   include could not find load file:
1> [CMake] 
1> [CMake]     C:/Program Files (x86)/aws-cpp-sdk-all/lib/aws-checksums/cmake/static/aws-checksums-targets.cmake
1> [CMake]   include could not find load file:
1> [CMake] 
1> [CMake]     C:/Program Files (x86)/aws-cpp-sdk-all/lib/aws-checksums/cmake/static/aws-checksums-targets.cmake
```

要解决此错误，请告诉 CMake 在哪里可以找到已安装的 SDK（例如，安装 SDK 时生成的文件夹（[Windows](setup-windows.md)、[Linux/m](setup-linux.md) acOS）。在 `CMakeLists.txt` 文件中首次调用 `find_package()` 之前，插入以下命令。有关示例，请参阅 [使用适用于 C\$1\$1 的 AWS SDK 创建简单应用程序](build-cmake.md)。

```
#Set the location of where Windows can find the installed libraries of the SDK.
if(MSVC)
    string(REPLACE ";" "/aws-cpp-sdk-all;" SYSTEM_MODULE_PATH "${CMAKE_SYSTEM_PREFIX_PATH}/aws-cpp-sdk-all")
    list(APPEND CMAKE_PREFIX_PATH ${SYSTEM_MODULE_PATH})
endif()
```

此解决方案仅适用于 SDK v1.8，因为在更高版本中，这些依赖项的处理方式有所不同。版本 1.9 通过在 `aws-sdk-cpp` 和 `aws-c-*` 库之间引入中间层来解决这些问题。这个新层称为 `aws-crt-cpp`，它是适用于 C\$1\$1 的 SDK 的 git 子模块。`aws-crt-cpp` 还有 `aws-c-*` 库（包括 `aws-c-common`、`aws-checksums`、` aws-c-event-stream` 等）作为自己的 git 子模块。这允许适用于 C\$1\$1 的 SDK 以递归方式获取所有 CRT 库并改进构建过程。

## CMake 错误：找不到加载文件
<a name="could-not-load-file2"></a>

CMake 如果找不到已安装的库，则会引发以下错误。

```
CMake Error at C:/Program Files (x86)/aws-cpp-sdk-all/lib/aws-c-auth/cmake/aws-c-auth-config.cmake:11 
         (include):  include could not find load file:   
         C:/Program Files (x86)/aws-cpp-sdk-all/lib/aws-c-auth/cmake/static/aws-c-auth-targets.cmake
```

要解决此错误，请告知 CMake 要构建共享库。在 `CMakeLists.txt` 文件中首次调用 `find_package()` 之前，插入以下命令。有关示例，请参阅 [使用适用于 C\$1\$1 的 AWS SDK 创建简单应用程序](build-cmake.md)。

```
set(BUILD_SHARED_LIBS ON CACHE STRING "Link to shared libraries by default.")
```

## 运行时错误：找不到 `aws-*.dll`，无法继续
<a name="dll-was-not-found"></a>

CMake 如果它找不到所需的 DLL，则会引发类似于以下内容的错误。

```
The code execution cannot proceed because aws-cpp-sdk-[dynamodb].dll was not found. Reinstalling the program may fix this problem.
```

出现此错误的原因是适用于 C\$1\$1 的 SDK 所需的库或可执行文件与您的应用程序可执行文件不在同一个文件夹中。要解决此错误，请将 SDK 构建输出复制到您的可执行文件位置。错误的特定 DLL 文件名将因您使用的 AWS 服务而异。请执行以下操作*之一*：
+ 将 适用于 C\$1\$1 的 AWS SDK 安装`/bin`文件夹的内容复制到应用程序的构建文件夹。
+ 在您的`CMakeLists.txt`文件中，使用宏 AWSSDK\$1CPY \$1DYN\$1LIBS 为您复制这些内容。

  向您的 `CMakeLists.txt` 文件添加 `AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR})` 或 `AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE})` 调用以使用此宏替您进行复制。有关示例，请参阅 [使用适用于 C\$1\$1 的 AWS SDK 创建简单应用程序](build-cmake.md)。

  为您的构建环境选择正确的复制路径。通过命令行生成通常会将生成输出放入子文件夹 (`/Debug`) 中，但是 Visual Studio 和其他文件 IDEs 通常不会。验证您的输出可执行文件的位置，并确保宏正在复制到该位置。在进行这些类型的更改时，最好删除构建输出目录中的内容，以便下一次构建有一个干净的起点。