2

フレームグラバーを使用してSDカードからビデオをロードし、画像処理操作を実行しています。JavaCVサイトのチュートリアルに従って、javaccとffmpegをロードしました。現在、アプリケーションを実行するために、PCに接続されたタブレット(Asus TF 101GとAndroidバージョン4.0.3)を使用していますが、正常に動作します。しかし、同じアプリケーションを別のデバイス(Android 4.1.2を搭載したNexusなど)で実行しようとすると、次のエラーが発生します。

02-01 16:51:54.687: E/AndroidRuntime(2839): FATAL EXCEPTION: main
02-01 16:51:54.687: E/AndroidRuntime(2839): java.lang.ExceptionInInitializerError
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacv.FFmpegFrameGrabber.<init>(FFmpegFrameGrabber.java:104)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.example.com.uniud.avires.MainActivity.onCreate(MainActivity.java:92)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.Activity.performCreate(Activity.java:5008)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.os.Looper.loop(Looper.java:137)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at java.lang.reflect.Method.invokeNative(Native Method)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at java.lang.reflect.Method.invoke(Method.java:511)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at dalvik.system.NativeStart.main(Native Method)
02-01 16:51:54.687: E/AndroidRuntime(2839): Caused by: java.lang.ExceptionInInitializerError
02-01 16:51:54.687: E/AndroidRuntime(2839):     at java.lang.Class.classForName(Native Method)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at java.lang.Class.forName(Class.java:217)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacpp.Loader.load(Loader.java:338)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacv.cpp.avcodec.<clinit>(avcodec.java:86)
02-01 16:51:54.687: E/AndroidRuntime(2839):     ... 16 more
02-01 16:51:54.687: E/AndroidRuntime(2839): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1891]: 26325 could not load needed library 'libavutil.so' for 'libjniavutil.so' (load_library[1093]: Library 'libavutil.so' not found)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at java.lang.Runtime.load(Runtime.java:340)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at java.lang.System.load(System.java:521)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:422)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacpp.Loader.load(Loader.java:372)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacpp.Loader.load(Loader.java:319)
02-01 16:51:54.687: E/AndroidRuntime(2839):     at com.googlecode.javacv.cpp.avutil.<clinit>(avutil.java:75)
02-01 16:51:54.687: E/AndroidRuntime(2839):     ... 20 more

何か提案はありますか?

Android.mkファイルも添付したい

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
include C:/Users/Marco/Desktop/new_ADT/adt-bundle-windows-x86_64/OpenCV-2.4.3.2-android-sdk/sdk/native/jni/OpenCV.mk
OPENCV_INSTALL_MODULES:=on
#OPENCV_CAMERA_MODULES:=on
LOCAL_MODULE    := udmodule
LOCAL_SRC_FILES := udjni.cpp
LOCAL_LDLIBS +=  -llog -ldl
include $(BUILD_SHARED_LIBRARY)

と私のApllication.mkファイル

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a 
#APP_ABI := all
APP_PLATFORM := android-8

なにか提案を?ありがとう

また、この方法でapplication.mkファイルを変更しようとしましたが、結果が得られませんでした。

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi
LOCAL_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mfpu=neon
LOCAL_LDLIBS += -Wl,--fix-cortex-a8
APP_PLATFORM := android-8
4

2 に答える 2

1

www.phonearena.com での相互参照 お使いのタブレットは NVIDIA Tegra 2 プロセッサを使用していると思いますが、Nexus は Tegra 3 プロセッサを使用しています。

libディレクトリに.soファイルをコピーすると仮定しています。ここで OpenCV4Android を見てみましょう。インストール可能な apk ファイルとしてパッケージ化されているため、プラットフォーム用にコンパイルされている .so ファイルについて心配する必要はありません。

NVIDIA は、特に Tegra プロセッサで OpenCV を実行するための手順もここに記載しています。

それが役立つことを願っています。

于 2013-04-25T16:14:36.560 に答える
0

原因: java.lang.UnsatisfiedLinkError: ライブラリをロードできません: link_image[1891]: 26325 は、'libjniavutil.so' に必要なライブラリ 'libavutil.so' をロードできませんでした (load_library[1093]: ライブラリ 'libavutil.so' が見つかりません)

ファイルの名前が間違っているように見えますか?

ライブラリ 'libavutil.so' が見つかりません

ファイル *.so を呼び出すには、次のコードを使用する必要があります。

static {
       System.loadLibrary("libavutil");
}
于 2013-11-19T11:09:34.147 に答える