Solução de problemas de compilação do AWS SDK para C++
Ao compilar o AWS SDK para C++ do código-fonte, alguns dos problemas comuns de compilação abaixo podem surgir.
Tópicos
Erro do CMake: não foi possível encontrar um arquivo de configuração de pacote fornecido pelo “AWSSDK”.
O CMake vai gerar o erro a seguir se não conseguir encontrar o SDK instalado.
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.
Para resolver esse erro, indique para o CMake onde encontrar o SDK instalado (por exemplo, a pasta que foi gerada como resultado da instalação do SDK (Windows, Linux/macOS). Insira o comando a seguir antes da primeira chamada para find_package() no arquivo CMakeLists.txt. Para ver um exemplo, consulte Criar uma aplicação simples usando o AWS SDK para C++ .
list(APPEND CMAKE_PREFIX_PATH "C:\\Program Files (x86)\\aws-cpp-sdk-all\\lib\\cmake")
Erro do CMake: não foi possível encontrar o arquivo de carregamento (e você está no SDK versão 1.8).
O CMake vai gerar o erro a seguir se não conseguir encontrar as bibliotecas instaladas.
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
Para resolver esse erro, indique para o CMake onde encontrar o SDK instalado (por exemplo, a pasta que foi gerada como resultado da instalação do SDK (Windows, Linux/macOS). Insira os comandos a seguir antes da primeira chamada para find_package() no arquivo CMakeLists.txt. Para ver um exemplo, consulte Criar uma aplicação simples usando o AWS SDK para 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()
Essa solução é somente para a v1.8 do SDK porque essas dependências são tratadas de forma diferente nas versões posteriores. A versão 1.9 resolve esses problemas introduzindo uma camada intermediária entre as bibliotecas aws-sdk-cpp e aws-c-*. Essa nova camada é chamada aws-crt-cpp e é um submódulo git do SDK para C++. aws-crt-cpp também tem as bibliotecas aws-c-* (incluindo aws-c-common, aws-checksums, aws-c-event-stream etc.) como seus próprios submódulos git. Isso permite que o SDK para C++ acesse todas as bibliotecas CRT recursivamente e melhore o processo de compilação.
Erro do CMake: não foi possível carregar o arquivo.
O CMake vai gerar o erro a seguir se não conseguir encontrar as bibliotecas instaladas.
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
Para corrigir esse erro, instrua o CMake a compilar bibliotecas compartilhadas. Insira o comando a seguir antes da primeira chamada para find_package() no arquivo CMakeLists.txt. Para ver um exemplo, consulte Criar uma aplicação simples usando o AWS SDK para C++ .
set(BUILD_SHARED_LIBS ON CACHE STRING "Link to shared libraries by default.")
Erro de rutime: não é possível continuar porque a aws-*.dll não foi encontrada.
O CMake vai gerar um erro semelhante ao seguinte se não conseguir encontrar uma DLL necessária.
The code execution cannot proceed becauseaws-cpp-sdk-[dynamodb].dll was not found. Reinstalling the program may fix this problem.
Esse erro ocorre porque as bibliotecas ou os executáveis necessários para o SDK para C++ não estão disponíveis na mesma pasta que os executáveis da sua aplicação. Para resolver esse erro, copie a saída da compilação do SDK em seu local de executável. O nome do arquivo DLL específico do erro variará dependendo dos serviços da AWS que você estiver usando. Execute um destes procedimentos:
-
Copie o conteúdo da pasta
/binda instalação do AWS SDK para C++ na pasta de compilação da sua aplicação. -
Em seu arquivo
CMakeLists.txt, use a macro AWSSDK_CPY_DYN_LIBS para copiá-los para você.Adicione uma chamada a um
AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR})ouAWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE})ao arquivoCMakeLists.txtpara usar essa macro a fim de fazer a cópia para você. Para ver um exemplo, consulte Criar uma aplicação simples usando o AWS SDK para C++ .Escolha o caminho de cópia correto para seu ambiente de compilação. A compilação via linha de comandos geralmente coloca a saída em uma subpasta (
/Debug), mas o Visual Studio e outros IDEs geralmente não. Verifique onde estão os executáveis de saída e garanta que a macro esteja fazendo a cópia nesse local. Ao fazer esses tipos de alteração, é prática recomendável excluir o conteúdo do diretório de saída para que você tenha um ponto de partida limpo para a próxima compilação.