Answered
0
0

Hello!

I have a crossplatform application, that works already perfect with fmod on windows, linux, osx and ios. Just android is not working. I tried everything, but when i call

fmod_system->init(32, FMOD_INIT_NORMAL, 0);

i get a segmentation fault. I presume the problem is, that my application is build against the gnustl as i make heavy use of C++11 features and fmod is build against the standard or stlport. The call to

FMOD::System_Create(&fmod_system);

before the init works fine.

Is it possible to get a native activity with gnustl running with fmod?

EDIT:

A minimal modification to the examples would just look like this:

For 3D example:

Replace in examples/eclipse/3d/jni/Application.mk
APP_STL := stlport_shared
with
APP_STL := gnustl_shared

as the common_platform.cpp and common.cpp and example.cpp (3d.cpp) will get compiled against gnustl and call fmod code which was precompiled with the standard stl from the .so, a segmentation fault will be rised.

The 3d example works perfectly with stlport_shared, but as i already wrote, this is not an option for me, as i need the full gnustl to get the full C++11 feature set. And this works fine for every other platform.

I really wish you could help me with this. I dont want a special (clumsy) code way with OpenSL or whatever just for android as i really enjoy working with fmod.

http://www.kandroid.org/ndk/docs/CPLUSPLUS-SUPPORT.html

You can only select a single C++ runtime that all your code will
depend on. It is not possible to mix shared libraries compiled against
different C++ runtimes.

  • You must to post comments
Good Answer
0
0

The problem is not with gnustl.

I/fmod    ( 8013): [LOG] System::create                           : Header version = 1.5.12.  Current version = 1.5.12.
I/fmod    ( 8013): [ERR] FMOD_OS_Output_GetDefault                : *** JavaVM::GetEnv returned -2 ***

I’ve been dealing with this as well. Here’s what I’ve got so far:

  • If you are running from a NativeActivity your native code is not running on the main activity thread.
  • The NativeActivity java class is instantiated and run on the main thread.
  • When ANativeActivity_onCreate() is called (from the main thread) a new thread is created that is the ‘main’ thread for the native code.
  • Error code -2 is JNI_EDETACHED. This means that JavaVM::GetEnv() was called from a thread the JVM is currently not bound to.

JavaVM::AttachCurrentThread() does not appear to be getting called as a fallback when GetEnv fails.

  • Benn Herrera
    Surrounding the native code calls for setting up the FMOD system (FMOD::System_Create(), system->getNumDrivers(), system->getDriverInfo(), system->init()) with a pair of AttachCurrentThread()/DetachCurrentThread() calls fixed the issue.
  • You must to post comments
1
0

I’ve run some tests and I haven’t had any trouble changing the example over to using gnustl_shared in the manner you describe.

One possibility that comes to mind is you aren’t loading the gnustl_shared lib in Java code and you have a device that doesn’t perform automatic dependency loading. Can you ensure that you have updated the System.loadlibrary entry in the main java file?

  • You must to post comments
0
0

Hi Mathew!

Thank you very much for looking into this issue. You are right, the example works with LoadLibrary gnustl_shared in the java file. It must be something else that i am doing wrong. Because i still get this error in my application. I will have to review the error more and have a deeper look into the fmod android example. I think it is something i am doing wrong.

It is weird, because in the Java App i have this code:

    // FMOD init
    org.fmod.FMOD.init(this);
    if (!org.fmod.FMOD.checkInit())
        Log.e(TAG, "************** FMOD INIT FAILED *************");
    else
        Log.i(TAG, "************** FMOD INIT OK *************");

and it says it is initialized ok

I always get this segmentation fault:

   I/EMWE    (  179): ************** FMOD INIT OK *************
    V/EMWE    (  179): Post create
    I/EMWE    (  179): Initialize fmod
    I/EMWE    (  179): FMOD System created
    I/EMWE    (  179): FMOD init
    F/libc    (  179): Fatal signal 11 (SIGSEGV) at 0x00000018 (code=1), thread 13040 (oft.livyngrinth)
    I/DEBUG   (  179): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    I/DEBUG   (  179): Build fingerprint: 'google/hammerhead/hammerhead:4.4.4/KTU84P/1227136:user/release-keys'
    I/DEBUG   (  179): Revision: '11'
    I/DEBUG   (  179): pid: 13017, tid: 13040, name: oft.livyngrinth  >>> com.emwesoft.livyngrinth <<<
    I/DEBUG   (  179): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000018
    I/DEBUG   (  179):     r0 77059010  r1 00000000  r2 00000000  r3 000158e4
    I/DEBUG   (  179):     r4 00000036  r5 77059010  r6 754a7e68  r7 00000000
    I/DEBUG   (  179):     r8 00000000  r9 00005dc0  sl 00000000  fp 00000000
    I/DEBUG   (  179):     ip 00000006  sp 75ddaaf0  lr 753c8fa4  pc 753db810  cpsr 600f0010
    I/DEBUG   (  179):     d0  0000000000000000  d1  0000000000000000
    I/DEBUG   (  179):     d2  0000000000000000  d3  0000000000000000
    I/DEBUG   (  179):     d4  000000007545b140  d5  0000000000000000
    I/DEBUG   (  179):     d6  0000000400000000  d7  3f80000000000158
    I/DEBUG   (  179):     d8  0000000000000000  d9  0000000000000000
    I/DEBUG   (  179):     d10 0000000000000000  d11 0000000000000000
    I/DEBUG   (  179):     d12 0000000000000000  d13 0000000000000000
    I/DEBUG   (  179):     d14 0000000000000000  d15 0000000000000000
    I/DEBUG   (  179):     d16 000000e0000000e9  d17 000000e0000000e9
    I/DEBUG   (  179):     d18 000000eb00000078  d19 000000ca00000036
    I/DEBUG   (  179):     d20 0000005d0000000a  d21 0000000a00000015
    I/DEBUG   (  179):     d22 000000f30000002f  d23 00000003000000ff
    I/DEBUG   (  179):     d24 0000000000000000  d25 0000000000000000
    I/DEBUG   (  179):     d26 ff000000ff000000  d27 ff000000ff000000
    I/DEBUG   (  179):     d28 000000ff000000ff  d29 000000ff000000ff
    I/DEBUG   (  179):     d30 0000000000000000  d31 0000000000000000
    I/DEBUG   (  179):     scr 20000012
    I/DEBUG   (  179): 
    I/DEBUG   (  179): backtrace:
    I/DEBUG   (  179):     #00  pc 0004d810  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):     #01  pc 0003afa0  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179): 
    I/DEBUG   (  179): stack:
    I/DEBUG   (  179):          75ddaab0  76e408e0  [anon:libc_malloc]
    I/DEBUG   (  179):          75ddaab4  75ddaaec  [stack:13040]
    I/DEBUG   (  179):          75ddaab8  00000000  
    I/DEBUG   (  179):          75ddaabc  754a7e68  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          75ddaac0  00000020  
    I/DEBUG   (  179):          75ddaac4  7545df10  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          75ddaac8  00000000  
    I/DEBUG   (  179):          75ddaacc  00000000  
    I/DEBUG   (  179):          75ddaad0  77059010  [anon:libc_malloc]
    I/DEBUG   (  179):          75ddaad4  00000000  
    I/DEBUG   (  179):          75ddaad8  754a7e68  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          75ddaadc  00000020  
    I/DEBUG   (  179):          75ddaae0  00000000  
    I/DEBUG   (  179):          75ddaae4  753d6ac0  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          75ddaae8  00000020  
    I/DEBUG   (  179):          75ddaaec  00000000  
    I/DEBUG   (  179):     #00  75ddaaf0  754b265c  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          ........  ........
    I/DEBUG   (  179):     #01  75ddaaf0  754b265c  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          75ddaaf4  76e40e00  [anon:libc_malloc]
    I/DEBUG   (  179):          75ddaaf8  00000006  
    I/DEBUG   (  179):          75ddaafc  00000036  
    I/DEBUG   (  179):          75ddab00  77059010  [anon:libc_malloc]
    I/DEBUG   (  179):          75ddab04  00000000  
    I/DEBUG   (  179):          75ddab08  00000000  
    I/DEBUG   (  179):          75ddab0c  00000000  
    I/DEBUG   (  179):          75ddab10  00005dc0  
    I/DEBUG   (  179):          75ddab14  753c8fa4  /data/app-lib/com.emwesoft.livyngrinth-2/libfmod.so
    I/DEBUG   (  179):          75ddab18  00015ed8  
    I/DEBUG   (  179):          75ddab1c  00808000  
    I/DEBUG   (  179):          75ddab20  77059008  [anon:libc_malloc]
    I/DEBUG   (  179):          75ddab24  40056e6b  /system/lib/libc.so (dlmalloc+4254)
    I/DEBUG   (  179):          75ddab28  00015ed0  
    I/DEBUG   (  179):          75ddab2c  4008fe00  /system/lib/libc.so

I will try to make a minimal example of my build. If that doesn’t solve the problem i will post it. And if it solves the problem i will tell you what i did wrong.

  • You must to post comments
0
0

Hi,

Did you ever fix this crash? I got the same stack as yours on my devices as well. When I upgraded to 1.05.12, I got a different stack:

F/libc    ( 7013): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x18 in tid 7032 (ainment.rainbow)
W/libc    ( 7013): Security Level: (1), Debug inforamtion is controlled by the DUMPABLE flag.
I/ActivityManager(  912): Displayed com.bifrostentertainment.rainbow/.RainbowActivity: +331ms
D/PMS     (  912): releaseWL(13bc90f5): PARTIAL_WAKE_LOCK  ActivityManager-Launch 0x1 null
I/WindowManager(  912): Screen frozen for +270ms due to Window{1d6b9118 u0 Starting com.bifrostentertainment.rainbow}
D/PMS     (  912): releaseWL(b575dd7): PARTIAL_WAKE_LOCK  SCREEN_FROZEN 0x1 null
I/DEBUG   (  458): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (  458): Build fingerprint: 'htc/htc_europe/htc_m8:5.0.1/LRX22C/448934.10:user/release-keys'
I/DEBUG   (  458): Revision: '0'
I/DEBUG   (  458): ABI: 'arm'
I/DEBUG   (  458): pid: 7013, tid: 7032, name: ainment.rainbow  >>> com.bifrostentertainment.rainbow <<<
I/DEBUG   (  458): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x18
I/DEBUG   (  458):     r0 ae680010  r1 00000000  r2 00000000  r3 000158e4
I/DEBUG   (  458):     r4 00000036  r5 ae680010  r6 b0028e68  r7 00000000
I/DEBUG   (  458):     r8 00000000  r9 00005dc0  sl 00000000  fp 00000000
I/DEBUG   (  458):     ip 00000006  sp a1f3d6e8  lr aff4939c  pc aff5bc4c  cpsr 600f0010
I/DEBUG   (  458):
I/DEBUG   (  458): backtrace:
I/DEBUG   (  458):     #00 pc 0004dc4c  /data/app/com.bifrostentertainment.rainbow-2/lib/arm/libfmod.so
I/DEBUG   (  458):     #01 pc 0003b398  /data/app/com.bifrostentertainment.rainbow-2/lib/arm/libfmod.so

It still crashes at the same place. I tried both with gnustl_shared and c++_shared.

  • You must to post comments
0
0

Oh, I seem to have gotten a Java stack as well:

W/ActivityManager(  912):   Force finishing activity com.bifrostentertainment.rainbow/.RainbowActivity
E/JavaBinder(  912): !!! FAILED BINDER TRANSACTION !!!
W/ActivityManager(  912): Exception thrown during pause
W/ActivityManager(  912): android.os.TransactionTooLargeException
W/ActivityManager(  912):   at android.os.BinderProxy.transactNative(Native Method)
W/ActivityManager(  912):   at android.os.BinderProxy.transact(Binder.java:504)
W/ActivityManager(  912):   at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:718)
W/ActivityManager(  912):   at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:877)
W/ActivityManager(  912):   at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2948)
W/ActivityManager(  912):   at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:2803)
W/ActivityManager(  912):   at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:2560)
W/ActivityManager(  912):   at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:12117)
W/ActivityManager(  912):   at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:12009)
W/ActivityManager(  912):   at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:12717)
W/ActivityManager(  912):   at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:12223)
W/ActivityManager(  912):   at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)
D/PMS     (  912): acquireWL(10f38745): PARTIAL_WAKE_LOCK  ActivityManager-Launch 0x1 912 1000 null
I/ActivityManager(  912): Recipient 11266
I/WindowState(  912): WIN DEATH: Window{3ede4d53 u0 com.bifrostentertainment.rainbow/com.bifrostentertainment.rainbow.RainbowActivity}
  • You must to post comments
0
0

Run with logging libraries:

I/fmod    ( 8013): [LOG] System::create                           : Header version = 1.5.12.  Current version = 1.5.12.
I/fmod    ( 8013): [ERR] FMOD_OS_Output_GetDefault                : JavaVM::GetEnv returned -2.
I/fmod    ( 8013): [LOG] SystemI::init                            : FMOD Studio Version: 00010512 (61695)
I/fmod    ( 8013): [LOG] SystemI::init                            : maxchannels = 16, flags = 00000000, extradriverdata = 0x0
I/fmod    ( 8013): [LOG] SystemI::close                           :
I/fmod    ( 8013): [LOG] SystemI::close                           : Stop all sounds
I/fmod    ( 8013): [LOG] SystemI::close                           : Remove miscllaneous DSP stuff.
I/fmod    ( 8013): [LOG] SystemI::close                           : done.
I/fmod    ( 8013):
I/fmod    ( 8013): [LOG] FMOD_OS_Init                             : Detected Neon instruction support, will use Neon optimized mixing and resampling.
I/fmod    ( 8013): [ERR] AndroidAssetFile::registerLib            : JavaVM::GetEnv returned -2.
I/fmod    ( 8013): [ERR] FMOD_OS_Output_GetDefault                : JavaVM::GetEnv returned -2.
I/fmod    ( 8013): [ERR] assert                                   : assertion: 'mOutput' failed
F/libc    ( 8013): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x18 in tid 8033 (ainment.rainbow)
W/libc    ( 8013): Security Level: (1), Debug inforamtion is controlled by the DUMPABLE flag.
  • You must to post comments
0
0

Hi Tommy!

I still haven’t had the time to fix this on android. But i presume, that i mixed more libraries with different stl’s or/and maybe compiled against different fmod headers. Or maybe we are also mixing hard-float and soft-float. I use hardfloat for my other libraries. I think it is an error in our build-setup with multiple libraries. When i fixed this, i will let you know. Please tell me also, if you fixed this.

  • Mathew Block
    FMOD does not use the hard floating point convention, all floats are passed using general purpose registers (not VFP registers).
  • You must to post comments
Showing 7 results
Your Answer

Please first to submit.