Trouble with Android and arsd.jni

burt invalid_email_address at cab.abc
Thu Sep 10 11:16:55 UTC 2020


Hello,

I'm trying to upgrade and improve an Android project I was 
working on a while ago. For this reason, I decided to upgrade my 
compiler to the newest LDC (v1.23.0).

I am using the arsd.jni library for the JNI headers and for 
initializing the runtime. However, I am getting linker errors, 
telling me that _tlsend, _tlsstart and __bss_end__ are missing.

So I tried to fix these by adding empty declarations for them 
myself (as I saw in another post):

```d
extern(C) __gshared
{
     @section(".tdata")
     int _tlsstart = 0;
     @section(".tcommon")
     int _tlsend = 0;
}
```

However, when doing this, it causes my app to crash, specifically 
on jni.d:1033 when calling `Runtime.initialize()`. The stack 
trace shows there is an assertion error in rt.sections_android in 
the foreach body of `getStaticTLSRange`.

I also tried adding an empty `void main() {}` instead, with the 
same result.

PR #2991 in dlang/druntime seems to have changed the way the TLS 
is emulated on Android or something. I have no clue what is going 
on and how to fix these errors, so if someone could help that 
would be much appreciated.

Thank you.


More information about the Digitalmars-d-learn mailing list