ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++에서 AWS SDK 연동하기
    개발 이야기/개발 및 서비스 2020. 2. 3. 11:44
    반응형

    설치하기

     Windows에서는 GitHub( https://github.com/aws/aws-sdk-cpp )에서 직접 다운받아 빌드를 하기보다는 NuGet으로 손쉽게 설치해서 사용하길 권합니다. (VS 2017에서는 문제가 없으나 2019에서는 동적 dll linking 에러가 발생합니다. VS 2019를 사용하시는 분들은 aws.amazon.com/ko/blogs/korea/aws-c-plus-sdk-in-windows-visual-studio/를 참고하여 정적 라이브러리로 빌드해서 사용하세요.)

     

    CentOS에서는 아래와 같은 순서로 설치할 수 있습니다.

     

    cmake(https://cmake.org/) 3.x 이상의 버전이 설치되어 있지 않다면 먼저 설치를 해야 합니다.

    > wget https://cmake.org/files/v3.16/cmake-3.16.3.tar.gz
    > tar -xvf cmake-3.16.3.tar.gz
    > cd cmake-3.16.3
    > ./bootstrap --prefix=/usr/local
    > make
    > make install
    > cmake --version

    만약 openssl 이나 zlib 가 없어서 make가 정상적으로 완료되지 않는다면 의존성 있는 라이브러리를 직접 설치하지 마시고 yum으로 cmake를 설치 후 다시 삭제하시는게 더 편합니다. 

    > yum install cmake
    > yum remove cmake

    이후 다시 cmake폴더에서 make를 실행해 설치를 마치시기 바랍니다.

     

    만약 cmake --version 실행 후 cmake를 찾을 수 없다고 나온다면 .bash_profile PATH에 /usr/local/bin을 추가해야 합니다.

    vi ~/.bash_profile
    
    .
    .
    
    PATH=/usr/local/bin:$PATH:$HOME/bin
    .
    .
    

    bash를 재실행 하던가 ssh 연결을 재접속하면 cmake를 정상적으로 실행할 수 있습니다.

     

    gcc도 4.9 버전 이상이 필요합니다.

    gcc --version

    4.9 미만이라면 아래 과정을 통해서 업그레이드를 진행하세요.

    > wget http://www.netgull.com/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
    > tar xvf gcc-8.3.0.tar.gz
    > mkdir gcc-8.3.0 && cd gcc-8.3.0
    > ./configure --enable-languages=c,c++ --enable-multilib # makefile 생성
    > make  # /tmp 폴더의 용량을 많이 사용합니다. 가동 전용량 체크 꼭 하세요.
            # 꽤 오랜 시간이 걸립니다. -j옵션으로 cpu core 개수를 지정할 수 있으며, 
            # 필요하다면 background로 실행하시기 바랍니다.
    > make install # /usr/local 에 설치합니다.

     

    cmake와 gcc 확인이 끝났다면 이제 aws sdk cpp를 다운받습니다. 

     

    GitHub( https://github.com/aws/aws-sdk-cpp ) 에서 다운받아 원하는 곳에 설치합니다.

    git clone https://github.com/aws/aws-sdk-cpp.git

    그리고 그 곳에 BUILD라는 폴더를 만들고 그 안에서 빌드를 실행합니다.

    > mkdir BUILD
    > cd BUILD
    > cmake ../ -D CMAKE_BUILD_TYPE=Release -D BUILD_ONLY="core"
    ># 만약 dependencies 를 별도 빌드하려면..
    ># cmake -D CMAKE_PREFIX_PATH=/path_to_aws-sdk-cpp/BUILD/.deps/install -D BUILD_DEPS=OFF ../
    > make -j 2 # 다른 서비스가 있어서 core 2개만
    > make install

    (* 주의!!! 전체 라이브러리를 실행하면 make 시 엄청난 시간이 필요합니다. 필요한 것만 빌드 하려면 cmake 시 "-D BUILD_ONLY" 옵션을 사용해 빌드하시길 강추합니다. 필요한 경우 -j 옵션으로 사용할 코어수를 지정할 수 있습니다.)

     

    빌드 시 아래와 같은 에러가 발생한다면 dependencies 를 별도 빌드한 static lib를 찾지 못한다는 에러입니다.

    .
    .
    CMake Error at /usr/local/lib64/aws-c-common/cmake/aws-c-common-config.cmake:7 (include):
    include could not find load file:
    
    /usr/local/lib64/aws-c-common/cmake/static/aws-c-common-targets.cmake
    Call Stack (most recent call first):
    .
    .

    이런 경우 aws-c-common, aws-checksums 그리고 aws-c-event-stream 세 lib를 별도 빌드하여 /usr/local/lib64에 복사해서 넣어주세요.

     

    dependencies 를 static으로 별도 빌드하려면 https://github.com/aws/aws-sdk-cpp/blob/master/README.md 의 "To build and install third party dependencies"를 참고하여 빌드합니다. 그리고 SDK 빌드 시 BUILD_DEPS를 Off로 설정하면 됩니다.

     

    cmake로 makefile을 생성 후 make 실행 시 /usr/include/4.8.5로 지정된 default include 경로 수정 방법을 몰라 /usr/local/include/8.3.0으로 링크 정보 수정

    ln -Tfs /usr/local/include/c++/8.3.0 /usr/include/4.8.5

     

    make 시 c++config.h가 없다는 에러 발생 발생하면..

    find /usr -name c++config.h

    cp /bits_path_to_c++config/* /usr/local/include/c++/8.3.0/bits/

     

     

    샘플 코드 실행하기

    이제 "Hello AWS"를 만들어서 빌드해 보겠습니다.

    #include <aws/core/Aws.h>
    
    int main()
    {
        // SDK를 사용을 위한 내부 자원 초기화 및 옵션 설정 (지금은 default)
        Aws::SDKOptions options;
        Aws::InitAPI(options);
    
    	// SDK에서 사용된 내부 자원 해제
        Aws::ShutdownAPI(options);
        return 0;
    }

    [Visual Studio]

    NuGet으로 install 시 샘플 코드의 프로젝트에 포함하여 위 예제 실행히 문제없어 빌드가 완료되는걸 확인할 수 있습니다. 

     

    [GCC on CentOS]

    VS보다는 할 일이 있네요. 우선 위 코드를 작성할 폴더를 하나 만듭니다. "sample"라는 폴더를 만들었다고 가정하겠습니다. 그 안에 위 샘플 코드 파일 명을 "main.cpp"로 생성합니다. 그리고 make를 위한 CMakeLists.txt 파일을 만듭니다. 그리고 아래 텍스트를 복사해서 넣어두세요.

    cmake_minimum_required(VERSION 3.2)
    
    project(aws_build)
    
    # 프로젝트에 필요한 sdk 이름을 나열
    find_package(AWSSDK REQUIRED COMPONENTS core)
    
    # 실행파일 이름, 컴파일할 cpp 파일명들
    add_executable(run_awstest main.cpp)
    
    # The libraries used by your executable.
    # "aws-cpp-sdk-s3" is just an example.
    target_link_libraries(aws_build ${AWSSDK_LINK_LIBRARIES})

     

    export CMAKE_PREFIX_PATH=/app/aws_test/aws-sdk-app
    export CMAKE_INSTALL_PATH=/app/aws_test/aws-sdk-app

    export -p

    unset CMAKE_PREFIX_PATH

     

     

     

     

     

     

    반응형

    댓글 0

Designed by Tistory.