반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

가끔 보자, 하늘.

C++에서 AWS SDK 연동하기 본문

개발 이야기/개발 및 서비스

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

 

 

 

 

 

 

반응형