Solução de problemas de compilação do AWS SDK para C++ - AWS SDK para C++

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.

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 because aws-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 /bin da 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}) ou AWSSDK_CPY_DYN_LIBS(SERVICE_LIST "" ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}) ao arquivo CMakeLists.txt para 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.