Can't build for OSX since moving from 1.9.0 to 1.9.8

Hi - I’m finding I can’t build for Mac (either bundling a Mac build or just selecting Start from the Debug menu) since we moved recently from 1.9.0 to 1.9.8.

My colleague who builds on Windows has no problems, and I can build on my Mac for iOS and Android OK, but the Mac builds won’t link. The problem seems to have something to do with the GameAnalytics extension. I think the relevant errors are below, any suggestions much appreciated as it’s way beyond my understanding of the engine what’s going on here…

Thanks!

Undefined symbols for architecture arm64:
“_curl_easy_cleanup”, referenced from:
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::sendEventsInArray(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator>&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator> const&) in libGameAnalytics.a[arm64]15
std::__1::__async_assoc_state<void, std::__1::__async_func<gameanalytics::http::GAHTTPApi::sendSdkErrorEvent(gameanalytics::http::EGASdkErrorCategory, gameanalytics::http::EGASdkErrorArea, gameanalytics::http::EGASdkErrorAction, gameanalytics::http::EGASdkErrorParameter, char const*, char const*, char const*)::$_0>>::__execute() in libGameAnalytics.a[arm64]15
“_curl_easy_getinfo”, referenced from:
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::sendEventsInArray(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator>&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator> const&) in libGameAnalytics.a[arm64]15
std::__1::__async_assoc_state<void, std::__1::__async_func<gameanalytics::http::GAHTTPApi::sendSdkErrorEvent(gameanalytics::http::EGASdkErrorCategory, gameanalytics::http::EGASdkErrorArea, gameanalytics::http::EGASdkErrorAction, gameanalytics::http::EGASdkErrorParameter, char const*, char const*, char const*)::$_0>>::__execute() in libGameAnalytics.a[arm64]15
“_curl_easy_init”, referenced from:
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::sendEventsInArray(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator>&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator> const&) in libGameAnalytics.a[arm64]15
std::__1::__async_assoc_state<void, std::__1::__async_func<gameanalytics::http::GAHTTPApi::sendSdkErrorEvent(gameanalytics::http::EGASdkErrorCategory, gameanalytics::http::EGASdkErrorArea, gameanalytics::http::EGASdkErrorAction, gameanalytics::http::EGASdkErrorParameter, char const*, char const*, char const*)::$_0>>::__execute() in libGameAnalytics.a[arm64]15
“_curl_easy_perform”, referenced from:
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::sendEventsInArray(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator>&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator> const&) in libGameAnalytics.a[arm64]15
std::__1::__async_assoc_state<void, std::__1::__async_func<gameanalytics::http::GAHTTPApi::sendSdkErrorEvent(gameanalytics::http::EGASdkErrorCategory, gameanalytics::http::EGASdkErrorArea, gameanalytics::http::EGASdkErrorAction, gameanalytics::http::EGASdkErrorParameter, char const*, char const*, char const*)::$_0>>::__execute() in libGameAnalytics.a[arm64]15
“_curl_easy_setopt”, referenced from:
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15

“_curl_easy_strerror”, referenced from:
gameanalytics::http::GAHTTPApi::requestInitReturningDict(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericDocument<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator, rapidjson::CrtAllocator>&, char const*) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::sendEventsInArray(gameanalytics::http::EGAHTTPApiResponse&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator>&, rapidjson::GenericValue<rapidjson::UTF8, rapidjson::MemoryPoolAllocatorrapidjson::CrtAllocator> const&) in libGameAnalytics.a[arm64]15
std::__1::__async_assoc_state<void, std::__1::__async_func<gameanalytics::http::GAHTTPApi::sendSdkErrorEvent(gameanalytics::http::EGASdkErrorCategory, gameanalytics::http::EGASdkErrorArea, gameanalytics::http::EGASdkErrorAction, gameanalytics::http::EGASdkErrorParameter, char const*, char const*, char const*)::$_0>>::__execute() in libGameAnalytics.a[arm64]15
“_curl_global_cleanup”, referenced from:
gameanalytics::http::GAHTTPApi::~GAHTTPApi() in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::~GAHTTPApi() in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::cleanUp() in libGameAnalytics.a[arm64]15
“_curl_global_init”, referenced from:
gameanalytics::http::GAHTTPApi::GAHTTPApi() in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::GAHTTPApi() in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::initInstance() in libGameAnalytics.a[arm64]15
“_curl_slist_append”, referenced from:
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
gameanalytics::http::GAHTTPApi::createRequest(void*, char const*, std::__1::vector<char, std::__1::allocator> const&, bool) in libGameAnalytics.a[arm64]15
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
com.defold.extender.ExtenderException: java.io.IOException: clang++ -c -isystem /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk/usr/include/c++/v1 -DDLIB_LOG_DOMAIN=“ADMOBEXT” -DDDF_EXPOSE_DESCRIPTORS -DDM_PLATFORM_MACOS -DDM_PLATFORM_OSX -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED -O2 -g -stdlib=libc++ -mmacosx-version-min=10.13 -isysroot /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk -nostdinc++ -fno-exceptions -fvisibility=hidden -Werror=format -arch arm64 -target arm64-apple-darwin19 -m64 -Ibuild/extension-admob/ -Iupload/ -Iupload/imageloader/include/ -Iupload/pcgrandom/include/ -Iupload/openssl/include/ -Iupload/screenshot/include/ -Iupload/share/include/ -Iupload/defold-spine/include/ -Iupload/gameanalytics/include/ -Iupload/textinput/include/ -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//sdk/include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//ext/include upload/extension-admob/src/admob.cpp -obuild/admob.cpp_0.o
clang++ -c -isystem /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk/usr/include/c++/v1 -DDLIB_LOG_DOMAIN=“ADMOBEXT” -DDDF_EXPOSE_DESCRIPTORS -DDM_PLATFORM_MACOS -DDM_PLATFORM_OSX -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED -O2 -g -stdlib=libc++ -mmacosx-version-min=10.13 -isysroot /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk -nostdinc++ -fno-exceptions -fvisibility=hidden -Werror=format -arch arm64 -target arm64-apple-darwin19 -m64 -Ibuild/extension-admob/ -Iupload/ -Iupload/imageloader/include/ -Iupload/pcgrandom/include/ -Iupload/openssl/include/ -Iupload/screenshot/include/ -Iupload/share/include/ -Iupload/defold-spine/include/ -Iupload/gameanalytics/include/ -Iupload/textinput/include/ -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//sdk/include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//ext/include upload/extension-admob/src/admob_android.cpp -obuild/admob_android.cpp_1.o
clang++ -c -isystem /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk/usr/include/c++/v1 -DDLIB_LOG_DOMAIN=“ADMOBEXT” -DDDF_EXPOSE_DESCRIPTORS -DDM_PLATFORM_MACOS -DDM_PLATFORM_OSX -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED -O2 -g -stdlib=libc++ -mmacosx-version-min=10.13 -isysroot /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk -nostdinc++ -fno-exceptions -fvisibility=hidden -Werror=format -arch arm64 -target arm64-apple-darwin19 -m64 -Ibuild/extension-admob/ -Iupload/ -Iupload/imageloader/include/ -Iupload/pcgrandom/include/ -Iupload/openssl/include/ -Iupload/screenshot/include/ -Iupload/share/include/ -Iupload/defold-spine/include/ -Iupload/gameanalytics/include/ -Iupload/textinput/include/ -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//sdk/include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//ext/include upload/extension-admob/src/admob_callback.cpp -obuild/admob_callback.cpp_2.o
clang++ -c -isystem /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk/usr/include/c++/v1 -DDLIB_LOG_DOMAIN=“ADMOBEXT” -DDDF_EXPOSE_DESCRIPTORS -DDM_PLATFORM_MACOS -DDM_PLATFORM_OSX -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED -O2 -g -stdlib=libc++ -mmacosx-version-min=10.13 -isysroot /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk -nostdinc++ -fno-exceptions -fvisibility=hidden -Werror=format -arch arm64 -target arm64-apple-darwin19 -m64 -Ibuild/extension-admob/ -Iupload/ -Iupload/imageloader/include/ -Iupload/pcgrandom/include/ -Iupload/openssl/include/ -Iupload/screenshot/include/ -Iupload/share/include/ -Iupload/defold-spine/include/ -Iupload/gameanalytics/include/ -Iupload/textinput/include/ -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//sdk/include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//ext/include upload/extension-admob/src/admob_ios.mm -obuild/admob_ios.mm_3.o
clang++ -c -isystem /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk/usr/include/c++/v1 -DDLIB_LOG_DOMAIN=“ADMOBEXT” -DDDF_EXPOSE_DESCRIPTORS -DDM_PLATFORM_MACOS -DDM_PLATFORM_OSX -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED -O2 -g -stdlib=libc++ -mmacosx-version-min=10.13 -isysroot /Users/bjorn/extender-production/platformsdk/MacOSX15.2.sdk -nostdinc++ -fno-exceptions -fvisibility=hidden -Werror=format -arch arm64 -target arm64-apple-darwin19 -m64 -Ibuild/extension-admob/ -Iupload/ -Iupload/imageloader/include/ -Iupload/pcgrandom/include/ -Iupload/openssl/include/ -Iupload/screenshot/include/ -Iupload/share/include/ -Iupload/defold-spine/include/ -Iupload/gameanalytics/include/ -Iupload/textinput/include/ -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//sdk/include -I/Users/bjorn/extender-production/sdk/67542769598a1b794877c96f740f3f527f63f491/defoldsdk//ext/include upload/extension-admob/src/utils/LuaUtils.cpp -obuild/LuaUtils.cpp_4.o

ld: symbol(s) not found for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ah, I think this is what @ekharkunov is looking into at the moment. It is related to Game Analytics I believe.

Thanks for the update, will keep an eye on the forums!

It’s not fully correct. Now I’m working on arm64 linux support in luasec extension. Regarding game analytics - they have pretty old issue `arm64-osx` support · Issue #40 · GameAnalytics/GA-SDK-DEFOLD · GitHub that haven’t been resolved yet.

1 Like

Thanks. The GameAnalytics extension has been fine for us on Mac using Defold 1.9.0. Only since updating to 1.9.8 have we seen this problem.

Here is my fork where osx support fully removed from the extension: GitHub - AGulev/GA-SDK-DEFOLD: Repository for GameAnalytics Defold SDK

1 Like

You can still build project with game analytics for x86_64 Mac (Intel chips). Only arm64 version is not supported (Apple silicon chips).
Please, check one more time what exactly build variant you tried with 1.9.0 Defold.

1 Like

Thanks - yes confirmed I can build x86_64 (which does run on my M2 Mac) but not arm64 with 1.9.0 - I hadn’t realised that.

All I really need to be able to do is have the game run on my Mac when I click Debug->Start/Attach. I guess, with 1.9.0 when I did that it was building an x86-64 Mac version and running/debugging that OK, but in 1.9.8 it tries to build the arm64 one and fails? Is there a way I can switch Defold to be building an x86-64 version when I click Debug->Start/Attach? I don’t actually need to build a Mac version as this is primarily a mobile and HTML5 game.

As Alexey mentioned above you can use his fork where osx support was fully removed

Thanks, but if there’s no support for osx then I can’t run/test the functionality on my development machine (the game relies on GameAnalytics for remote configuration).

Is there no way of making Defold 1.9.8 create an intel Mac version of the build by default when I Start/Debug (which is what Defold 1.9.0 seems to do by default)? I would assume that, somewhere, I can specify this to happen, but I haven’t been able to find any documentation that covers how I’d do that.

Thanks!

I guess I can just make a mac bundle, run it manually, set that as the target and then start the debugger, but if there’s a more elegant solution that would be helpful!

The solution is for you to fork their extension, and make the modification in the relevant source files,
E.g. in the ext.manifest you can add a define for arm64-osx (e.g. DM_PLATFORM_UNSUPPORTED), and then use that in the .cpp files.

We often do this when a platform is unsupported, and if you look closely, they do it too:

So, some small modifications, and you should be good to go.

Thank you, will try that

But, to confirm - there is no way I can make Defold 1.9.8 try to make me an intel OSX build rather than an arm-64 one when I press Start/Debug?

Currently no.

Also, it seems pinging a member of their org, “revived” the issue again.
So they may have a solution at some point:

3 Likes

Thanks. I’ve also messaged GA support, hopefully something will get done!

1 Like