

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

# 解决 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 通常不会。验证您的输出可执行文件的位置，并确保宏正在复制到该位置。在进行这些类型的更改时，最好删除构建输出目录中的内容，以便下一次构建有一个干净的起点。