title: UnsatisfiedLInkError Linking to FFMPEG with NDK
body: <p>I compiled FFMPEG for android using bambuser's files. The compile runs fine. No errors. 
  I also made sure to change the package name in build.sh. However, once I try to link to the files, the phone throws an UnsatisfiedLinkError. This is the Androkd.mk file:</p>
  
  <pre><code>LOCAL_PATH := $(call my-dir)
  
  include $(CLEAR_VARS)
  MY_LIB_PATH := ffmpeg-android/build/ffmpeg/armeabi/lib
  LOCAL_MODULE := bambuser-libavcore
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libavcore.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE := bambuser-libavformat
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libavformat.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE := bambuser-libavcodec
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libavcodec.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE := bambuser-libavdevice
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libavdevice.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE := bambuser-libavfilter
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libavfilter.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE := bambuser-libavutil
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libavutil.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  include $(CLEAR_VARS)
  LOCAL_MODULE := bambuser-libswscale
  LOCAL_SRC_FILES := $(MY_LIB_PATH)/libswscale.so
  include $(PREBUILT_SHARED_LIBRARY)
  
  
  #local_PATH := $(call my-dir)
  
  include $(CLEAR_VARS)
  
  LOCAL_MODULE    := libtest_jni
  LOCAL_SRC_FILES := libtest/video.c
  
  LOCAL_C_INCLUDES := \
      $(LOCAL_PATH)/include \
          $(LOCAL_PATH)/ffmpeg-android/ffmpeg 
          LOCAL_LDLIBS := -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib -L$(LOCAL_PATH) -L$(LOCAL_PATH)/ffmpeg-android/build/ffmpeg/armeabi/lib/ -lavformat -lavcodec -lavdevice -lavfilter -lavutil -lswscale -llog -lz -lm
          #dl -lgcc
  
          include $(BUILD_SHARED_LIBRARY)
  </code></pre>
  
  <p>Video.c is dead simple:</p>
  
  <pre><code>#include &lt;libavcodec/avcodec.h&gt;
  #include &lt;libavformat/avformat.h&gt;
  #include &lt;libswscale/swscale.h&gt;
  
  #include &lt;jni.h&gt;  
  #include &lt;string.h&gt;  
  #include &lt;stdio.h&gt;
  #include &lt;android/log.h&gt;  
  
  void Java_com_bukabros_videolivewallpaper_Opengl2Renderer_loadNthFrame3
         (JNIEnv * env, jobject this, jstring fileName)  {
  
         jboolean isCopy;  
           const char * szLogThis = (*env)-&gt;GetStringUTFChars(env, fileName, &amp;isCopy);  
  
            __android_log_print(ANDROID_LOG_DEBUG, "NDK: ", "NDK:LC: [%s]", szLogThis); 
            }   
  </code></pre>
  
  <p>Tne corresponding Java code is also simple:</p>
  
  <pre><code> private native void loadNthFrame3(String fileName);
  
   static {  
  System.loadLibrary("libtest_jni");  
   }  
  </code></pre>
  
  <p>But I get this error:</p>
  
  <pre><code>E/AndroidRuntime(11489): FATAL EXCEPTION: main
  
  E/AndroidRuntime(11489): java.lang.ExceptionInInitializerError
  
  E/AndroidRuntime(11489):    at com.bukabros.videolivewallpaper.VideoLiveWallpaper$CubeEngine.&lt;init&gt;(VideoLiveWallpaper.java:147)
  
  E/AndroidRuntime(11489):    at com.bukabros.videolivewallpaper.VideoLiveWallpaper.onCreateEngine(VideoLiveWallpaper.java:120)
  
  E/AndroidRuntime(11489):    at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:814)
  
  E/AndroidRuntime(11489):    at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
  
  E/AndroidRuntime(11489):    at android.os.Handler.dispatchMessage(Handler.java:99)
  
  E/AndroidRuntime(11489):    at android.os.Looper.loop(Looper.java:123)
  
  E/AndroidRuntime(11489):    at android.app.ActivityThread.main(ActivityThread.java:4627)
  
  E/AndroidRuntime(11489):    at java.lang.reflect.Method.invokeNative(Native Method)
  
  E/AndroidRuntime(11489):    at java.lang.reflect.Method.invoke(Method.java:521)
  
  E/AndroidRuntime(11489):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
  
  E/AndroidRuntime(11489):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
  
  E/AndroidRuntime(11489):    at dalvik.system.NativeStart.main(Native Method)
  
  E/AndroidRuntime(11489): Caused by: java.lang.UnsatisfiedLinkError: Library libtest_jni not found
  
  E/AndroidRuntime(11489):    at java.lang.Runtime.loadLibrary(Runtime.java:461)
  
  E/AndroidRuntime(11489):    at java.lang.System.loadLibrary(System.java:557)
  
  E/AndroidRuntime(11489):    at com.bukabros.videolivewallpaper.Opengl2Renderer.&lt;clinit&gt;(Opengl2Renderer.java:389)
  
  E/AndroidRuntime(11489):    ... 12 more
  </code></pre>
  
  <p>I tried manually loading the prebuilt shared libraries (the bambuser files) in Java (using System.loadLibrary) but then it tells me that the files are not found. </p>
  
  <p>If it helps, here's the output of readelf:</p>
  
  <pre><code> 0x00000001 (NEEDED)                     Shared library: [libc.so]
    0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
     0x00000001 (NEEDED)                     Shared library: [libm.so]
      0x00000001 (NEEDED)                     Shared library: [/data/data/com.bukabros.videolivewallpaper/lib/libavformat.so]
       0x00000001 (NEEDED)                     Shared library: [/data/data/com.bukabros.videolivewallpaper/lib/libavcodec.so]
        0x00000001 (NEEDED)                     Shared library: [/data/data/com.bukabros.videolivewallpaper/lib/libavdevice.so]
         0x00000001 (NEEDED)                     Shared library: [/data/data/com.bukabros.videolivewallpaper/lib/libavfilter.so]
          0x00000001 (NEEDED)                     Shared library: [/data/data/com.bukabros.videolivewallpaper/lib/libavutil.so]
       0x00000001 (NEEDED)                     Shared library: [/data/data/com.bukabros.videolivewallpaper/lib/libswscale.so]
        0x00000001 (NEEDED)                     Shared library: [liblog.so]
         0x00000001 (NEEDED)                     Shared library: [libz.so]
          0x00000001 (NEEDED)                     Shared library: [libdl.so]
           0x0000000e (SONAME)                     Library soname: [libtest_jni.so]
            0x00000010 (SYMBOLIC)                   0x0
             0x00000004 (HASH)                       0xd4
              0x00000005 (STRTAB)                     0x250
           0x00000006 (SYMTAB)                     0x130
            0x0000000a (STRSZ)                      712 (bytes)
             0x0000000b (SYMENT)                     16 (bytes)
              0x00000003 (PLTGOT)                     0x174c
               0x00000002 (PLTRELSZ)                   32 (bytes)
                0x00000014 (PLTREL)                     REL
                 0x00000017 (JMPREL)                     0x55c
                  0x6ffffffe (VERNEED)                    0x53c
               0x6fffffff (VERNEEDNUM)                 1
                0x6ffffff0 (VERSYM)                     0x518
                 0x00000000 (NULL)                       0x0
  </code></pre>
  
  <p>Oh yeah. I'm using ndk r5.</p>