1. 현상
한 솔루션에서 S3 지원 업그레이드 소스를 작성하고 다른 솔루션에 적용하기 위해 소스코드를 그대로 가져와 컴파일하는 도중에 Aws::MakeShared에서 "std::shared_ptr<Aws::FStream>"에서 "std::shared_ptr<Aws::IOStream>"으로의 사용자 정의 변환이 적절하지 않습니다. 라는 이상한 에러가 발생합니다.
std::shared_ptr<Aws::IOStream> input_data = Aws::MakeShared<Aws::FStream>("SampleAllocationTag", objectName.c_str(), std::ios_base::in | std::ios_base::binary);
2. 원인 및 수정.
소스코드를 제대로 보지 않고 필요한 헤더만 찾아서 코딩해 발생한 에러였습니다.
github.com/aws/aws-sdk-cpp/issues/1168
위의 이슈를 제기한 분도 저랑 동일한 실수를 저질렀나 봅니다. 다시 한번 AWS의 예시 코드를 확인했습니다.
#include <iostream>
#include <fstream>
#include <sys/stat.h>
#include <aws/core/Aws.h>
#include <aws/s3/S3Client.h>
#include <aws/s3/model/PutObjectRequest.h>
#include <awsdoc/s3/s3_examples.h>
bool AwsDoc::S3::PutObject(const Aws::String& bucketName,
const Aws::String& objectName,
const Aws::String& region)
{
// Verify that the file exists.
struct stat buffer;
if (stat(objectName.c_str(), &buffer) == -1)
{
std::cout << "Error: PutObject: File '" <<
objectName << "' does not exist." << std::endl;
return false;
}
Aws::Client::ClientConfiguration config;
if (!region.empty())
{
config.region = region;
}
Aws::S3::S3Client s3_client(config);
Aws::S3::Model::PutObjectRequest request;
request.SetBucket(bucketName);
request.SetKey(objectName);
std::shared_ptr<Aws::IOStream> input_data =
Aws::MakeShared<Aws::FStream>("SampleAllocationTag",
objectName.c_str(),
std::ios_base::in | std::ios_base::binary);
request.SetBody(input_data);
Aws::S3::Model::PutObjectOutcome outcome =
s3_client.PutObject(request);
if (outcome.IsSuccess()) {
std::cout << "Added object '" << objectName << "' to bucket '"
<< bucketName << "'.";
return true;
}
else
{
std::cout << "Error: PutObject: " <<
outcome.GetError().GetMessage() << std::endl;
return false;
}
}
코드만 보지말고 위의 include를 잘 보면 "include <fstream>"이 존재합니다. fstream을 include 해주면 문제없이 잘 컴파일됩니다.
반응형
'Programming > C++' 카테고리의 다른 글
[C++] Fatal error C1083 포함 파일을 열 수 없습니다. 'ctype.h': No such file or directory (0) | 2021.07.20 |
---|---|
[AWSSDKCPP] Assertion Failed! aws-cpp-sdk-core.dll - s_HttpClientFactory (0) | 2021.02.01 |
[C++] C++에서 AWS SDK 직접 빌드해 사용하기. (0) | 2021.01.05 |
[C++] Error: LNK1117 'VERSION: 1.0.0.0' 옵션에 구문 오류가 있습니다. (0) | 2020.11.19 |
[C++] Convert CStirng to const char* (0) | 2020.05.20 |