AWS SDK for C++ のビルドに関する問題のトラブルシューティング
ソースから AWS SDK for C++ をビルドする際、次のようにビルドに関する一般的な問題が発生する可能性があります。
トピック
CMake エラー: 「AWSSDK」によって提供されるパッケージ設定ファイルが見つかりませんでした
インストールされた 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 のインストール先 (例: Windows、Linux/macOS) を指定します。CMakeLists.txt ファイルで最初に find_package() を呼び出す前に、次のコマンドを挿入します。例については、「AWS SDK for C++ を使用したシンプルなアプリケーションの作成 」を参照してください。
list(APPEND CMAKE_PREFIX_PATH "C:\\Program Files (x86)\\aws-cpp-sdk-all\\lib\\cmake")
CMake エラー: ロードファイルが見つかりませんでした (現在の SDK バージョンは 1.8 です)
インストールされたライブラリが見つからない場合、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 のインストール先 (例: Windows、Linux/macOS) を指定します。CMakeLists.txt ファイルで最初に find_package() を呼び出す前に、次のコマンドを挿入します。例については、「AWS SDK for C++ を使用したシンプルなアプリケーションの作成 」を参照してください。
#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 バージョン 1.8 専用です。これより前のバージョンでは依存関係の扱いが異なります。バージョン 1.9 では、aws-sdk-cpp ライブラリと aws-c-* ライブラリの間に中間レイヤーを導入することで、これらの問題に対処しています。この新しいレイヤーは aws-crt-cpp という名前で、SDK for C++ の git サブモジュールです。aws-crt-cpp は aws-c-* ライブラリ (aws-c-common、aws-checksums、 aws-c-event-streamなど) も独自の git サブモジュールとして含んでいます。これにより、SDK for C++ はすべての CRT ライブラリを再帰的に取得でき、ビルドプロセスが改善されます。
CMake エラー: ロードファイルが見つかりませんでした
インストールされたライブラリが見つからない場合、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() を呼び出す前に、次のコマンドを挿入します。例については、「AWS SDK for C++ を使用したシンプルなアプリケーションの作成 」を参照してください。
set(BUILD_SHARED_LIBS ON CACHE STRING "Link to shared libraries by default.")
ランタイムエラー: aws-*.dll が見つからなかったため処理を続行できません
必要な DLL が見つからない場合、CMake は次のようなエラーを表示します。
The code execution cannot proceed becauseaws-cpp-sdk-[dynamodb].dll was not found. Reinstalling the program may fix this problem.
このエラーは、SDK for C++ に必要なライブラリまたは実行可能ファイルがアプリケーションの実行可能ファイルと同じフォルダにないため発生します。このエラーを解決するには、SDK のビルド出力をアプリケーションの実行可能ファイルのある場所にコピーします。エラーとなる DLL の具体的なファイル名は、使用している AWS サービスによって異なります。次のいずれかを行います。
-
AWS SDK for C++ のインストール先にある
/binフォルダの内容をアプリケーションのビルドフォルダにコピーします。 -
CMakeLists.txtファイル内でマクロ AWSSDK_CPY_DYN_LIBS を使用すると、これらのファイルを自動でコピーできます。このマクロを使用するには、
AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR})またはAWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE})の呼び出しをCMakeLists.txtファイルに追加します。例については、「AWS SDK for C++ を使用したシンプルなアプリケーションの作成 」を参照してください。ビルド環境に合った正しいコピー先パスを選択してください。コマンドラインからのビルドでは出力がサブフォルダ (
/Debug) に配置されることが多いですが、Visual Studio やその他の IDE ではそうとは限りません。出力された実行可能ファイルの場所を確認し、マクロが正しい場所にコピーしていることを確認してください。この種の変更を行う際は、ビルド出力ディレクトリの内容を削除して、次回のビルドをクリーンな状態から開始することをお勧めします。