2015-02-26 6 views
10

मेरे पास एक वीडियो ट्रिमर एप्लिकेशन कोड है।एंड्रॉइड एनडीके: java.lang.UnsatisfiedLinkError प्राप्त करना: dlopen विफल: "libffmpeg.so" द्वारा संदर्भित प्रतीक "सिग्नल" का पता नहीं लगा सकता

इसके Android.mk फ़ाइल कोड नीचे वर्णित है:

MY_LOCAL_PATH := $(call my-dir) 

$ (सभी 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) 

और Application.mk फ़ाइल कोड है:

APP_MODULES  := ffmpeg video-trimmer 
APP_OPTIM := debug 

जब मैं इस एप्लिकेशन को चलाने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है:

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) 

मेरा वीडियो-trimmer.so और ffmpeg.so \libs\armeabi में उत्पन्न होते हैं।

अग्रिम धन्यवाद।

+0

यह लिंक आपकी मदद करेगा: - http://stackoverflow.com/questions/18111739/why-do-some-android-phones-cause-our-app-to-throw-an-java-lang-unsatisfiedlinker –

+0

@japanjotsingh धन्यवाद। मैं आपकी त्वरित प्रतिक्रिया –

+0

की सराहना करता हूं क्या आप अपने * application.mk * के अंदर 'APP_PLATFORM: = android-15' सेट अप करने का प्रयास कर सकते हैं? – ph0b

उत्तर

14

signal मंच एंड्रॉइड -21 तक एक इनलाइन फ़ंक्शन था, अब यह अब इनलाइन नहीं है।

जब आप ndk r10 का उपयोग करते हैं, एंड्रॉइड -21 डिफ़ॉल्ट रूप से उपयोग किया जाता है लेकिन यह पूर्व एंड्रॉइड संस्करणों वाले डिवाइसों के साथ पूरी तरह से रेट्रो-संगत नहीं है। आपके मामले में, सिग्नल आपके डिवाइस पर नहीं पाया जा सकता है (लेकिन यह लॉलीपॉप पर ठीक से चल जाएगा)।

एनडीके का उपयोग करते समय, आपको प्लेटफ़ॉर्म (APP_PLATFORM:=android-XX) का उपयोग करना चाहिए जो आपके android:minSdkVersion से मेल खाता है।

तो यहाँ आप अंदर Application.mk Makefile APP_PLATFORM:=android-15 सेट कर सकते हैं, और अपने lib संकेत के इनलाइन संस्करण का उपयोग करेंगे, तो यह क्रम में अपने प्रतीक के लिए देखो नहीं होंगे।

+0

अब मैं वॉटरमार्क एप्लिकेशन बनाने की कोशिश कर रहा हूं। मैंने साइट ffmpeg.org से कमांड का इस्तेमाल किया।लेकिन निष्पादित करने का प्रयास करते समय, मुझे लॉगकैट में एक त्रुटि मिलती है: अपरिचित विकल्प filter_complex। मेरा stackoverflow सवाल है - http://stackoverflow.com/questions/28763388/andoid-ndk-ffmpeg-unrecognised-option-filter-complex –

+0

एंड्रॉइड स्टूडियो संकलन Android.mk की आवश्यकता नहीं है, android.ndk gradle का उपयोग करें। मैं "APP_PLATFORM" कैसे सेट कर सकता हूं? – Hugo

+0

अभी तक ऐसा करने का कोई साफ तरीका नहीं है। आप APP_PLATFORM संस्करण को बदलने के लिए compileSdkVersion को संशोधित कर सकते हैं। मैंने यहां इस मुद्दे की सूचना दी है: https://code.google.com/p/android/issues/detail?id=177530 – ph0b

संबंधित मुद्दे