

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 針對適用於 C\$1\$1 組建問題的 AWS SDK 進行故障診斷
<a name="troubleshooting-cmake"></a>

 適用於 C\$1\$1 的 AWS SDK 從來源建置 時，可能會出現下列一些常見的建置問題。

**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>

如果找不到安裝的 SDK，CMake 會引發下列錯誤。

```
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/macOS](setup-linux.md))。將下列命令插入 檔案`find_package()`，再呼叫 `CMakeLists.txt`。如需範例，請參閱[使用適用於 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/macOS](setup-linux.md))。將下列命令插入 檔案`find_package()`，再呼叫 `CMakeLists.txt`。如需範例，請參閱[使用適用於 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-*`程式庫之間引入中繼層來解決這些問題。這個新 layer 稱為 `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 建置共用程式庫。將下列命令插入 檔案`find_package()`，再呼叫 `CMakeLists.txt`。如需範例，請參閱[使用適用於 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>

如果找不到必要的 DLL，CMake 會引發類似下列的錯誤。

```
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 為您複製這些項目。

  將呼叫新增至 `AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE})` `AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR})`或 `CMakeLists.txt` 檔案，以使用此巨集為您執行複製。如需範例，請參閱[使用適用於 C\$1\$1 的 AWS SDK 建立簡單的應用程式](build-cmake.md)。

  為您的建置環境選擇正確的複製路徑。透過命令列建置經常將建置輸出放入子資料夾 (`/Debug`)，但 Visual Studio 和其他 IDEs 通常不會。驗證輸出可執行檔的位置，並確保巨集正在複製到該位置。進行這些類型的變更時，最佳實務是刪除組建輸出目錄的內容，以便您取得下一個組建的乾淨起點。