ndk5 exception crash with third-party library

by wasabee18 » Thu, 12 May 2011 09:01:05 GMT


Sponsored Links
 i everyone, that's my first post, please be nice :)
My problem is as follows:

I have 2 library, namely lib1 and lib2 compiled with standalone
toolchain.
Both libs need to use stl and exception.
I am using ndkr5, and i have problem with exception !

According to the doc in ndk (document android-ndk-r5b/docs/CPLUSPLUS-
SUPPORT.html), it is mentioned that :
"
WARNING: IMPORTANT CAVEAT

AT THE MOMENT, OUR STLPORT IMPLEMENTATION DOES NOT SUPPORT
EXCEPTIONS
AND RTTI. PLEASE BE SURE TO NOT USE -fexceptions OR -frtti IN ALL
MODULES THAT USE IT.

IF YOU NEED THESE, PLEASE USE "gnustl_static".
"

so in my Application.mk, I have added:
APP_STL := gnustl_static

==================== my test with one single lib (promising)
=================================
I tested as follows:
1) Test 1 :
if i use try/catch within jni, it works with gnustl_static, but it
works as well for stlport_static. i assume it works for stlport_shared
as well
example:
try {
throw 1
} catch (in e) {
LOHI("catch int %d", e); // OK
}

2) Test 2 :
if i use try/catch within my external lib, say in lib1, then it works
with gnustl_static, but it works as well for stlport_static. i assume
it works for stlport_shared as well.
example:
try {
throw 1
} catch (in e) {
LOHI("catch int %d", e); // OK
}

3) Test 3:
if i throw the exception from the external lib and try to catch it
withing the jni code, then the app crashes if i use gnustl_static.
example:
lib.c
void func()
{
throw 1;
}
and in jni:
try{
func(); // CRASH
} catch (int e) {
LOHI("catch int %d", e);
}

I have figured that if i use stlport_static instead of gnustl_static,
then it works! This is contradictory to what documentation says ... ??
Can someone share their experience ?

Anyway, my first tests finished, I have tried with 2 libs instead of a
single one... and the problems started.

=========================== end my test with one single lib
================================


=================my external libs compiled with standalone toolchain
===========================
my 2 external libs are as follows:
lib1 has just one file lib1.c containing one function:
void lib1_func1(int *i)
{
throw 11;
}
According to doc android-ndk-r5b/docs/STANDALONE-TOOLCHAIN.html, it is
mentioned that:
"
The toolchain binaries *do* support C++ exceptions and RTTI by
default.
They are enabled by default, so use -fno-exceptions and -fno-rtti if
you
want to disable them when building sources with them (e.g. to generate
smaller machine code).

NOTE: You will need to explicitely link with libsupc++ if you use
these
features. To do this, use -lsupc++ when linking binaries, as in:

arm-linux-androideabi-g++ .... -lsupc++

"

so i compile and link against lsupc++ as:
arm-linux-androideabi-g++ -mthumb -O2 -g -Wall -fpic -c lib1.c -o
lib1.o
arm-linux-androideabi-g++ -shared -Wl,-soname,liblib1.so lib1.o -lsupc
++ -o liblib1.so

lib2 has just one file lib2.c containing one function:
void lib2_func1(int *i)
{
throw 21;
}
i compile it as (linking against libsupc++):
arm-linux-androideabi-g++ -mthumb -O2 -g -Wall -fpic -c lib2.c -o
lib2.o
arm-linux-androideabi-g++ -shared -Wl,-soname,liblib2.so lib2.o -lsupc
++ -o liblib2.so

=================== end external lib
===================================================

===================== Android.mk



Re: ndk5 exception crash with third-party library

by Marcin Orlowski » Thu, 12 May 2011 17:01:31 GMT


 



I beliee your problem shall be discussed on NDK list, not here (SDK).

Regards,
Marcin Orlowski

*Tray Agenda < http://bit.ly/trayagenda> ;* - keep you daily schedule handy...
*Date In Tray* < http://bit.ly/dateintraypro> ; - current date at glance...
WebnetMobile on *Facebook < http://webnetmobile.com/fb/> ;* and
*Twitter< http://webnetmobile.com/twitter/> ;
*

-- 


Sponsored Links


Re: ndk5 exception crash with third-party library

by wasabee18 » Fri, 20 May 2011 17:24:28 GMT


 sorry. I intended to post it on ndk list. my mistake.
I have re-posted to ndk list.

Thanks.






-- 



Other Threads

1. Merge bitmaps

I want to merge and show two bitmaps few times per second ( I'm using
orientation sensor and need to display in ImageView two parts of one
big bitmap ).

Bitmap b = BitmapFactory.decodeFile( url );
Bitmap all = Bitmap.createBitmap( xScreen, yScreen,
Config.ARGB_8888 );
Canvas c = new Canvas( all );
ImageView imageView = ...;

public void drawBitmaps( float values[] )
{
...
                c.save();
                Bitmap b2 = Bitmap.createBitmap( b, 0, startY,
xScreen / 2, yScreen );
                Bitmap b3 = Bitmap.createBitmap( b, startX, startY,
xScreen / 2, yScreen );

                c.drawBitmap( b2, 0, 0, null );
                c.drawBitmap( b3, startX, 0, null );
                imageView.setImageBitmap( all );
                c.restore();
}

I need to call drawBitmaps(...) few times per second, and operation
Canvas.drawBitmap(...) take a lot of time and it's useless. Do you
know any better idea how to merge two bitmaps faster?

-- 

2. Custom Menu Layout

Hi All,

This is less of a question and more just a heads up.  I spent a lot of
time looking through this forum and others trying to find a technique
for creating custom menus.  Specifically I wanted something that
looked similar to the default menus in Gingerbread in my app
regardless of which version of the Android OS was installed on the
phone.

It took me a while of piecing together information from a number of
posts and tutorials but I finally got something workable and so am
sharing the source code.  If you find yourself looking for a way to
create your own menu layouts and styles, here is my solution:
http://www.codeproject.com/KB/android/AndroidMenusMyWay.aspx.  There
is plenty of room for improvement I realize but hopefully the code
will help save some of my fellow devs some time.

Regards,
authorwjf

-- 

3. MotionEvent.getEdgeFlags() never reports non-zero value

4. Getting rid of white line in Tab Widget

5. Get data from EditText

6. read character unicode form sqlite

7. WebView as map