I have a video trimmer application code .
Its Android.mk file code is mentioned below:
MY_LOCAL_PATH := $(call my-dir)
include $(all-subdir-makefiles)
LOCAL_PATH :=$(MY_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := video-trimmer
LOCAL_SRC_FILES := video-trimmer.c
LOCAL_C_INCLUDES := $(MY_LOCAL_PATH) $(MY_LOCAL_PATH)/ffmpeg
LOCAL_SHARED_LIBRARIES := ffmpeg
LOCAL_LDLIBS += -lz -llog
include $(BUILD_SHARED_LIBRARY)
and Application.mk file code is :
APP_MODULES := ffmpeg video-trimmer
APP_OPTIM := debug
When I try to run this application, I get following error :
02-26 16:06:05.779: E/AndroidRuntime(4092): FATAL EXCEPTION: main
02-26 16:06:05.779: E/AndroidRuntime(4092): Process: net.video.trimmer, PID: 4092
02-26 16:06:05.779: E/AndroidRuntime(4092): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "signal" referenced by "libffmpeg.so"...
02-26 16:06:05.779: E/AndroidRuntime(4092): at java.lang.Runtime.loadLibrary(Runtime.java:364)
02-26 16:06:05.779: E/AndroidRuntime(4092): at java.lang.System.loadLibrary(System.java:526)
02-26 16:06:05.779: E/AndroidRuntime(4092): at net.video.trimmer.service.VideoTrimmingService.onCreate(VideoTrimmingService.java:29)
02-26 16:06:05.779: E/AndroidRuntime(4092): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2585)
02-26 16:06:05.779: E/AndroidRuntime(4092): at android.app.ActivityThread.access$1800(ActivityThread.java:139)
02-26 16:06:05.779: E/AndroidRuntime(4092): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
02-26 16:06:05.779: E/AndroidRuntime(4092): at android.os.Handler.dispatchMessage(Handler.java:102)
02-26 16:06:05.779: E/AndroidRuntime(4092): at android.os.Looper.loop(Looper.java:136)
02-26 16:06:05.779: E/AndroidRuntime(4092): at android.app.ActivityThread.main(ActivityThread.java:5086)
02-26 16:06:05.779: E/AndroidRuntime(4092): at java.lang.reflect.Method.invokeNative(Native Method)
02-26 16:06:05.779: E/AndroidRuntime(4092): at java.lang.reflect.Method.invoke(Method.java:515)
02-26 16:06:05.779: E/AndroidRuntime(4092): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
02-26 16:06:05.779: E/AndroidRuntime(4092): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
02-26 16:06:05.779: E/AndroidRuntime(4092): at dalvik.system.NativeStart.main(Native Method)
My video-trimmer.so and ffmpeg.so are generated in \libs\armeabi
.
Thanks in advance.
signal
was an inline function until platform android-21, now it's not inline anymore.
When you use the ndk r10, android-21 is used by default but it's not fully retro-compatible with devices running former Android versions. In your case, signal can't be found on your device (but it would run properly on Lollipop).
When using the NDK, you should use the platform (APP_PLATFORM:=android-XX
) that corresponds to your android:minSdkVersion
.
So here you can set APP_PLATFORM:=android-15
inside Application.mk Makefile, and your lib will use the inline version of signal, so it will not look for its symbol at runtime.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With