Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android load native library

I'm trying to load a library I built with the standalone NDK toolchain.

I built libGLmove.so and placed it in libs/armeabi of my Eclipse project

However, the call to System.loadLibrary("GLmove") throws an UnsatisfiedLinkError

Any ideas as to how to resolve the problem or make Android find my library? How does ndk-build package the library after it builds it?

Edit: The exact compile flags are:

/Users/thomas/Documents/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/darwin-x86/bin/arm-eabi-g++ --sysroot=/Users/thomas/Documents/android-ndk-r5b/platforms/android-8/arch-arm -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 -fno-exceptions -fno-rtti -nostdlib -fpic -shared -o GLmove.so -O3

like image 511
Prime Avatar asked Jun 02 '11 00:06

Prime


1 Answers

Have you checked in the resulting .APK file (use a zip utility to look at/unarchive it) to see if your library makes it through packaging? I'm a little suspicious that it might not, because I notice that everything that gets built into the "libs" folder in the project and on my build machine goes into a folder called "lib" (no 's') in the APK.

I wouldn't be too surprised if it turned out that the Eclipse build process doesn't package up any libraries it doesn't know about. This is, of course, unlike what happens with resources, which just get packaged by virtue of being in the right place.

If you find your library is not in your APK file, I don't think you can just manually put it in there, since it won't show up in the package manifest and will break any signing as well.

You don't mention whether or not your Eclipse project is an NDK project (right click on the project, Android Tools->Add Native Support.) If not, I suspect you'll need to make it into one and then add your library to the Android.mk file as a dependency and not a target.

Or: you could try putting your library into /res in the project and use System.load() instead of System.loadLibrary() to load it. I'll admit that I've never tried that myself, tho.

like image 189
jimkberry Avatar answered Sep 24 '22 09:09

jimkberry