Android Release - Link Error - Aws::Utils::EnumParseOverflowContainer

0

Hello,

I'm back on trying to get an Android Clang Release build up and running, and I'm running into a linker error:

c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::RoleMappingTypeMapper::GetRoleMappingTypeForName(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&): error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::RoleMappingTypeMapper::GetNameForRoleMappingType(Aws::CognitoIdentity::Model::RoleMappingType): error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::AmbiguousRoleResolutionTypeMapper::GetAmbiguousRoleResolutionTypeForName(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&): error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::AmbiguousRoleResolutionTypeMapper::GetNameForAmbiguousRoleResolutionType(Aws::CognitoIdentity::Model::AmbiguousRoleResolutionType): error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::MappingRule::Jsonize() const: error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::RoleMapping::operator=(Aws::Utils::Json::JsonValue const&): error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::RoleMapping::operator=(Aws::Utils::Json::JsonValue const&): error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)'
c:\Amazon\Lumberyard\1.11.1.0\dev\Code\SDKs\AWSNativeSDK\lib\android\ndk_r12\android-21\armeabi-v7a\clang-3.8\Release/libaws-cpp-sdk-cognito-identity.a(ub_COGNITO-IDENTITY.cpp.o):/var/lib/jenkins/jobs/AndroidArm32Sta/workspace/aws-sdk-cpp/_build_android_arm_32_static_release/aws-cpp-sdk-cognito-identity/ub_COGNITO-IDENTITY.cpp:function Aws::CognitoIdentity::Model::RoleMapping::Jsonize() const: error: undefined reference to 'Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

tl;dr:

"undefined reference to 'Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(...)'"

"undefined reference to 'Aws::Utils::EnumParseOverflowContainer::StoreOverflow(...)'"

Android Clang Debug works fine, runs on device, etc. Any help here would be MOST appreciated.

Cheers!

asked 6 years ago176 views
15 Answers
0
Accepted Answer

Hi @REDACTEDUSER

I was able to find the problem and it was indeed a link order issue with the AWS core library. Adding the following to Tools/build/waf-1.7.13/lmbrwaflib/lumberyard_sdks.py should patch the problem.

    @REDACTEDUSER
@before_method('propagate_uselib_vars')
def link_aws_sdk_core_after_android(self):
platform = self.env['PLATFORM']
if not ('android' in platform and self.bld.spec_monolithic_build()):
return
if 'AWS_CPP_SDK_CORE' in self.uselib:
self.uselib = [ uselib for uselib in self.uselib if uselib != 'AWS_CPP_SDK_CORE' ]
self.uselib.append('AWS_CPP_SDK_CORE')

Let me know if you are still seeing an issue after applying the patch.

answered 6 years ago
0

Oh man this looks fun -- fetching some answers for ya. Sorry for the delayed response!

answered 6 years ago
0

FWIW, I checked the shared and static libs - the symbols are there:

(static)

$ nm -g -C ./Debug/libaws-cpp-sdk-core.a | grep EnumParseOverflowContainer
00000000 T Aws::CheckAndSwapEnumOverflowContainer(Aws::Utils::EnumParseOverflowContainer*, Aws::Utils::EnumParseOverflowContainer*)
00000000 W Aws::Utils::EnumParseOverflowContainer* Aws::New<Aws::Utils::EnumParseOverflowContainer>(char const*)
00000000 W Aws::Utils::EnumParseOverflowContainer::EnumParseOverflowContainer()
00000000 W Aws::Utils::EnumParseOverflowContainer::~EnumParseOverflowContainer()
00000000 W void Aws::Delete<Aws::Utils::EnumParseOverflowContainer>(Aws::Utils::EnumParseOverflowContainer*)
EnumParseOverflowContainer.cpp.o:
00000000 T Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)
00000000 T Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const
$ nm -g -C ./Release/libaws-cpp-sdk-core.a | grep EnumParseOverflowContainer
00000001 T Aws::CheckAndSwapEnumOverflowContainer(Aws::Utils::EnumParseOverflowContainer*, Aws::Utils::EnumParseOverflowContainer*)
EnumParseOverflowContainer.cpp.o:
00000001 T Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)
00000001 T Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const

(shared)

$ objdump -TC ./Debug/libaws-cpp-sdk-core.so | grep EnumParseOverflowContainer
000c27c4 g DF .text 0000063c Base Aws::CheckAndSwapEnumOverflowContainer(Aws::Utils::EnumParseOverflowContainer*, Aws::Utils::EnumParseOverflowContainer*)
000e8934 w DF .text 00000064 Base Aws::Utils::EnumParseOverflowContainer* Aws::New<Aws::Utils::EnumParseOverflowContainer>(char const*)
0014a860 w DF .text 000000e4 Base Aws::Utils::EnumParseOverflowContainer::EnumParseOverflowContainer()
0014aa50 w DF .text 0000005c Base Aws::Utils::EnumParseOverflowContainer::~EnumParseOverflowContainer()
000e8998 w DF .text 00000044 Base void Aws::Delete<Aws::Utils::EnumParseOverflowContainer>(Aws::Utils::EnumParseOverflowContainer*)
001a8dc8 g DF .text 000003dc Base Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)
001a84c4 g DF .text 00000904 Base Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const
$ objdump -TC ./Release/libaws-cpp-sdk-core.so | grep EnumParseOverflowContainer
00087c39 g DF .text 00000030 Base Aws::CheckAndSwapEnumOverflowContainer(Aws::Utils::EnumParseOverflowContainer*, Aws::Utils::EnumParseOverflowContainer*)
000cd091 g DF .text 00000220 Base Aws::Utils::EnumParseOverflowContainer::StoreOverflow(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, Aws::Allocator<char> > const&)
000ccd75 g DF .text 0000031c Base Aws::Utils::EnumParseOverflowContainer::RetrieveOverflow(int) const
answered 6 years ago
0

Any ideas, @REDACTEDUSER

answered 6 years ago
0

Thanks for sharing this! I've sent this over to my peers to take a look. Will update you on answers ASAP!

answered 6 years ago
0

Any updates? I'd love to do some performance testing on mobile devices :(

answered 6 years ago
0

Hi @REDACTEDUSER

It looks as if the AWS core library isn't getting included in the linker command. Could you verify this by either looking at the task dump when the command fails or running your build command with "--zones=runner" included (note: you may need to be quick to capture the temp response file before it's deleted with this option)?

answered 6 years ago
0

6015-build-out.txt|attachment (403 KB)build-out.txtHi @REDACTEDUSER

Here's the tail end of the task dump (ommitted all of the .o files, etc preceding the library options)

-lAzGameFramework -lEMotionFXStaticLib -lGem.CloudGemFramework.StaticLibrary.6fc787a982184217a5a553ca24676cfa.v1.1.1 -lAzFramework -lGridMate -lGridMateForTools -lCryAction_AutoFlowNode -lAzCore -lAkMemoryMgr -lAkMusicEngine -lAkSoundEngine -lAkStreamMgr -lAkCompressorFX -lAkConvolutionReverbFX -lAkDelayFX -lAkExpanderFX -lAkFlangerFX -lAkGainFX -lAkGuitarDistortionFX -lAkHarmonizerFX -lAkMatrixReverbFX -lAkMeterFX -lAkParametricEQFX -lAkPeakLimiterFX -lAkPitchShifterFX -lAkRecorderFX -lAkRoomVerbFX -lAkStereoDelayFX -lAkTimeStretchFX -lAkTremoloFX -lAkAudioInputSource -lAkSilenceSource -lAkSineSource -lAkSynthOne -lAkToneSource -lAkSoundSeedImpactFX -lAkSoundSeedWind -lAkSoundSeedWoosh -lCrankcaseAudioREVModelPlayerFX -lAkVorbisDecoder -lMcDSPFutzBoxFX -lMcDSPLimiterFX -lfreetype2 -llz4 -ltomcrypt -ltommath -lexpat -lzlib -lmd5 -llzma -llzss -laws-cpp-sdk-core -lcurl -lssl -lcrypto -lz -laws-cpp-sdk-cognito-identity -laws-cpp-sdk-identity-management -laws-cpp-sdk-lambda -laws-cpp-sdk-gamelift -llua -Wl,-Bdynamic -lc:\\Amazon\\Lumberyard\\1.11.1.0\\dev\\Code -lJ:/work/Android/NDK\\platforms\\android-21\\arch-arm\\usr\\lib -lJ:/work/Android/NDK\\sources\\cxx-stl\\llvm-libc++\\libs\\armeabi-v7a -lc:\\Amazon\\Lumberyard\\1.11.1.0\\dev\\Code\\SDKs -lc:\\Amazon\\Lumberyard\\1.11.1.0\\dev\\Code\\Tools\\CryCommonTools -lc:\\Amazon\\Lumberyard\\1.11.1.0\\dev\\Code\\Tools\\HLSLCrossCompiler\\lib\\android-armeabi-v7a -lc:\\Amazon\\Lumberyard\\1.11.1.0\\dev\\Code\\SDKs\\AWSNativeSDK\\lib\\android\\ndk_r12\\android-21\\armeabi-v7a\\clang-3.8\\Release -landroid -lc -llog -ldl -lc++_shared -lOpenSLES -lAzCore -lHLSLcc -lGLESv2 -lEGL -lm -lGLESv1_CM -laws-cpp-sdk-gamelift'

I see -lAzCore in there, but I don't see the AWS core lib specified anywhere. Attached is the full output if you want to take a look -

answered 6 years ago
0

hi @REDACTEDUSER

answered 6 years ago
0

Here you go - list of all the gems I have enabled:

    {
"GemListFormatVersion": 2,
"Gems": [
{
"Path": "Gems/EMotionFX",
"Uuid": "044a63ea67d04479aa5daf62ded9d9ca",
"Version": "0.1.0",
"_comment": "EMotionFX"
},
{
"Path": "MyGame/Gem",
"Uuid": "0cc9caf722af45e69b2fefa913212db3",
"Version": "0.1.0"
},
{
"Path": "Gems/LyShine",
"Uuid": "0fefab3f13364722b2eab3b96ce2bf20",
"Version": "0.1.0",
"_comment": "LyShine"
},
{
"Path": "Gems/CloudCanvasCommon",
"Uuid": "102e23cf4c4c4b748585edbce2bbdc65",
"Version": "0.1.0",
"_comment": "CloudCanvasCommon"
},
{
"Path": "Gems/LegacyGameInterface",
"Uuid": "3108b261962e44b6a0c1c036c693bca2",
"Version": "1.0.0",
"_comment": "LegacyGameInterface"
},
{
"Path": "Gems/CryLegacy",
"Uuid": "352fef7706634c92814c587e84d7165a",
"Version": "0.1.0",
"_comment": "CryLegacy"
},
{
"Path": "Gems/Maestro",
"Uuid": "3b9a978ed6f742a1acb99f74379a342c",
"Version": "0.1.0",
"_comment": "Maestro"
},
{
"Path": "Gems/CertificateManager",
"Uuid": "659cffff33b14a10835bafc6ea623f98",
"Version": "0.0.1",
"_comment": "CertificateManager"
},
{
"Path": "Gems/CloudGemFramework/v1",
"Uuid": "6fc787a982184217a5a553ca24676cfa",
"Version": "1.1.1",
"_comment": "CloudGemFramework"
},
{
"Path": "Gems/GameLift",
"Uuid": "76de765796504906b73be7365a9bff06",
"Version": "2.0.0",
"_comment": "GameLift"
},
{
"Path": "Gems/PhysicsEntities",
"Uuid": "99ea531451fc4f64a5a9fe8f385e8a76",
"Version": "0.1.0",
"_comment": "PhysicsEntities"
},
{
"Path": "Gems/Camera",
"Uuid": "f910686b6725452fbfc4671f95f733c6",
"Version": "0.1.0",
"_comment": "Camera"
},
{
"Path": "Gems/LmbrCentral",
"Uuid": "ff06785f7145416b9d46fde39098cb0c",
"Version": "0.1.0",
"_comment": "LmbrCentral"
}
]
}

Hope that helps!

answered 6 years ago
0

Hi @REDACTEDUSER

answered 6 years ago
0

@REDACTEDUSER

answered 5 years ago
0

I'm pushing to get this into 1.18... sorry for the wait!

answered 5 years ago
0

Hi @Twolewis, I just wanted to let you know that I was able to reproduce the link error with the list of gems you provided. I'll report back as soon as I figure out what's going on!

answered 6 years ago
0

Hi @Twolewis, my apologies for the delay. I do see the AWS core library hidden in the linker command. Given that, it now may be a link order issue though I'm not quite sure why it would manifest itself now. Do you have any other AWS gems enabled besides CloudGemFramework mentioned the linker command? I would like to see what the bare minimum is to reproduce this issue locally so I can get to the bottom of it.

answered 6 years ago

This post is closed: Adding new answers, comments, and votes is disabled.