Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LDC runtime is broken for android #4268

Closed
MrcSnm opened this issue Nov 16, 2022 · 4 comments
Closed

LDC runtime is broken for android #4268

MrcSnm opened this issue Nov 16, 2022 · 4 comments

Comments

@MrcSnm
Copy link

MrcSnm commented Nov 16, 2022

Tested

I'm doing that on windows btw.
My etc.conf:


"aarch64-.*-linux-android":
{
    switches = [
        "-defaultlib=phobos2-ldc,druntime-ldc",
        "-link-defaultlib-shared=false",
        "-gcc=C:/Users/Hipreme/AppData/Local/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang.cmd",
        "-linker=C:/Users/Hipreme/AppData/Local/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/bin/ld.exe"
    ];
    lib-dirs = [
        "%%ldcbinarypath%%/../../ldc2-1.22.0-android-aarch64/lib",
    ];
    rpath = "";
};


  • 1.22.0
  • 1.26.0
  • 1.27.0
  • 1.28.0
  • 1.28.1

dlopen failed: cannot locate symbol "__start___minfo" referenced by "/data/app/com.hipremeengine.app-5v-UadUCsHwXgGTgHWJRiA==/lib/arm64/libhipreme_engine.so"...

  • 1.29
  • 1.30

2022-11-16 20:13:03.648 2987-2987 DEBUG pid-2987 A #1 pc 00000000000bb348 /data/app/com.hipremeengine.app-4SMbRX-MLQzfat6W-RP7Pw==/lib/arm64/libhipreme_engine.so (_D4core8internal2gc4bits6GCBits10copyRangeZMFNbNimmPxmZv+196)

This trivial code gives runtime error on rt_init

import core.stdc.stdarg;

version (Android):

enum android_LogPriority
{
    ANDROID_LOG_UNKNOWN,
    ANDROID_LOG_DEFAULT,
    ANDROID_LOG_VERBOSE,
    ANDROID_LOG_DEBUG,
    ANDROID_LOG_INFO,
    ANDROID_LOG_WARN,
    ANDROID_LOG_ERROR,
    ANDROID_LOG_FATAL,
    ANDROID_LOG_SILENT
}
extern (C) @system nothrow @nogc
{
    int __android_log_write(int prio, const(char)* tag, const(char)* text);
    int __android_log_print(int prio, const(char)* tag, const(char)* fmt, ...);
    int __android_log_vprint(int prio, const(char)* tag, const(char)* fmt, va_list ap);
    void __android_log_assert(const(char)* cond, const(char)* tag, const(char)* fmt, ...);
}


export extern(C)
void Java_com_hipremeengine_app_HipremeEngine_HipremeInit(void* env, void* clazz)
{
    import core.runtime;
	__android_log_write(android_LogPriority.ANDROID_LOG_WARN, "MyAPP", "Hello before");
    rt_init();
	__android_log_write(android_LogPriority.ANDROID_LOG_FATAL, "MyAPP", "Hello after");
}
@kinke
Copy link
Member

kinke commented Nov 17, 2022

The lld linker (coming with NDKs >= 22 IIRC) isn't supported on Android, our TLS emulation requires the bfd linker. So any NDK > 21 doesn't work, see #3918.

@MrcSnm
Copy link
Author

MrcSnm commented Nov 17, 2022

"aarch64-.*-linux-android":
{
    switches = [
        "-defaultlib=phobos2-ldc,druntime-ldc",
        "-link-defaultlib-shared=false",
        "-gcc=C:/Users/Hipreme/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android21-clang.cmd",
        "-linker=C:/Users/Hipreme/AppData/Local/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/windows-x86_64/bin/aarch64-linux-android-ld.bfd.exe"
    ];
    lib-dirs = [
        "%%ldcbinarypath%%/../../ldc2-1.29.0-android-aarch64/lib",
    ];
    rpath = "%%ldcbinarypath%%/../../ldc2-1.29.0-android-aarch64/lib";
};

Is working now! Thanks

@s-ludwig
Copy link
Contributor

Looks like this has become a blocker for Android apps. Any published app must now be targeted at API level 33, but NDK r21e only supports up to 30.

@kinke
Copy link
Member

kinke commented Mar 23, 2024

Thx for the info. Let's close this and move the 'discussion' to #3918, which contains more detailed info.

@kinke kinke closed this as completed Mar 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants