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!

feita há 7 anos183 visualizações
15 Respostas
0
Resposta aceita

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.

respondido há 6 anos
0

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

respondido há 7 anos
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
respondido há 7 anos
0

Any ideas, @REDACTEDUSER

respondido há 7 anos
0

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

respondido há 7 anos
0

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

respondido há 7 anos
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)?

respondido há 7 anos
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 -

respondido há 7 anos
0

hi @REDACTEDUSER

respondido há 6 anos
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!

respondido há 6 anos
0

Hi @REDACTEDUSER

respondido há 6 anos
0

@REDACTEDUSER

respondido há 5 anos
0

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

respondido há 5 anos
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!

respondido há 6 anos
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.

respondido há 6 anos

Esta postagem está fechada: a adição de novas respostas, comentários e votos está desativada.