以下の記事で作ったプラグインのaws-sdk-cppを更新しようとしていろいろはまったので内容をメモしておきます。
環境
UE4.27.2
aws-sdk-cpp 1.9.353
導入方法
以下に導入手順があるのでそれに従います。
導入ではまったところ
上記の文書を見ずに最初にaws-sdk-cppのコードをgithubから取得してビルドして利用しようとすると
AWS_DEEP_CHECKSやAWS_USE_IO_COMPLETION_PORTSなどが定義されていないというエラーでUnrelEngine側のビルドでエラーになりました。
上記の文書にあるとおり[プロジェクト名].Build.csにbEnableUndefinedIdentifierWarnings = false;を追加することで回避できました。
利用ではまったところ
S3のGeneratePresignedUrl利用個所でのクラッシュ
Aws::Stringを反すGeneratePresignedUrl関数の利用個所でエディタプレイでクラッシュするという現象が発生しました。
クラッシュではaccess violationが発生しており文字列のメモリ解放部分で起きているようでした。
おそらくメモリ管理方法がUnrealEngine側とSDKのdll側で異なりdll内で確保したAws::StringのメモリをUnrealEngine側で解放するする際に解放メモリのサイズの食い違いが起きたのではないかと思います。
力技でGeneratePresignedUrlの返り値をconst char*にした関数をaws-sdk-cppに用意してビルド、利用するとクラッシュは発生しなくなりました。
本来は以下にあるようにaws-sdkのメモリ管理方法をUnrealEngineにあわせる必要があるのではないかと思います。
2023/09/14追記:UnrealEngineでaws-sdk-cppのメモリ管理をUnrealEngineと合わせる - Qiitaを書きました。
S3のPutObjectが遅い環境がある
PutObjectでアップロードが遅い環境がありました。
一般的なWebでのSpeedTestでは問題なさそうでバージョンが古いaws-sdkなら速かったです。
原因はまだよくわかっていません。