0

Android ndk スタンドアロン ツールチェーンを使用して、 C++ ライブラリを Android プラットフォームに正常にクロス コンパイルしました。jni dolder と Android.mk ファイルを使用して新しい Android アプリケーション プロジェクトを Eclipse に作成しました。ndk-build を実行すると、ビルドがうまくいき、mylib.so が libs/armeabi フォルダーに追加されます。 System.loadLibrary("mylibname"); logcat に次のエラーが表示されます: Unable to dlopen(/data/data/com.oussama.firsttry/lib/libdash.so): Cannot load library: link_image[1995]: failed to link libdash.so that cause a java .lang.UnsatisfiedLinkError: 私のライブラリが見つかりません** .

ライブラリが依存するライブラリが必要で、エミュレーターがそれをロードできないため、readelf -d mylib.soを実行しました。結果は次のとおりです。

オフセット 0x1617c4 の動的セクションには、26 のエントリが含まれます。

 Tag        Type                         Name/Value
0x00000001 (NEEDED)                     Shared library: [libm.so]
0x00000001 (NEEDED)                     Shared library: [libc.so]
0x00000001 (NEEDED)                     Shared library: [libdl.so]
0x0000000e (SONAME)                     Library soname: [libdash.so]
0x00000010 (SYMBOLIC)                   0x0
0x0000000f (RPATH)                      Library rpath:      [/home/oussama064/libdash/libdash/../../neededLibs]
0x00000019 (INIT_ARRAY)                 0x157268
0x0000001b (INIT_ARRAYSZ)               172 (bytes)
0x0000001a (FINI_ARRAY)                 0x157314
0x0000001c (FINI_ARRAYSZ)               8 (bytes)
0x00000004 (HASH)                       0xf4
0x00000005 (STRTAB)                     0x10f58
0x00000006 (SYMTAB)                     0x50b8
0x0000000a (STRSZ)                      134112 (bytes)
0x0000000b (SYMENT)                     16 (bytes)
0x00000003 (PLTGOT)                     0x1618b4
0x00000002 (PLTRELSZ)                   1096 (bytes)
0x00000014 (PLTREL)                     REL
0x00000017 (JMPREL)                     0x40dd8
0x00000011 (REL)                        0x31b38
0x00000012 (RELSZ)                      62112 (bytes)
0x00000013 (RELENT)                     8 (bytes)
0x00000018 (BIND_NOW)                   
0x6ffffffb (FLAGS_1)                    Flags: NOW
0x6ffffffa (RELCOUNT)                   7738
0x00000000 (NULL)                       0x0

ここに私の Android.mk ファイルがあります:

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS) LOCAL_MODULE    := libcurl  LOCAL_SRC_FILES :=
 ../../../../neededLibs/libcurl.a

 include $(PREBUILT_STATIC_LIBRARY)

 include $(CLEAR_VARS) LOCAL_MODULE    := libxml  LOCAL_SRC_FILES :=
 ../../../../neededLibs/libxml2.a

 include $(PREBUILT_STATIC_LIBRARY)

 include $(CLEAR_VARS) LOCAL_MODULE    := libz  LOCAL_SRC_FILES :=
 ../../../../neededLibs/libz.a

 include $(PREBUILT_STATIC_LIBRARY)

 include $(CLEAR_VARS) LOCAL_MODULE    := m  LOCAL_SRC_FILES :=
 libm.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS)
 LOCAL_MODULE    := dl  LOCAL_SRC_FILES := libdl.so

 include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE
 := c  LOCAL_SRC_FILES := libc.so

 include $(PREBUILT_SHARED_LIBRARY)

 include $(CLEAR_VARS)

 LOCAL_MODULE := d LOCAL_SRC_FILES := libdash.so
 LOCAL_SHARED_LIBRARIES := c m dl 

 LOCAL_STATIC_LIBRARIES := libz libxml libcurl  include
 $(PREBUILT_SHARED_LIBRARY)

私は今本当に立ち往生していて、不足しているライブラリが何であるかわかりません

ndk-build V=1 -B を実行すると、次の結果が得られます。

rm -f /home/oussama064/Android/workspace/FirstTry/libs/armeabi/lib*.so   

そのため、依存関係が低下しました。make: 循環 obj/local/armeabi/libm.so <- obj/local/armeabi/libc.so 依存関係が削除されました。make: 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libm.so 依存関係が削除されました。make: 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libc.so 依存関係が削除されました。make: 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libdl.so 依存関係が削除されました。事前構築済み: libdl.so <= /home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libdl.so 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libc.so 依存関係が削除されました。make: 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libdl.so 依存関係が削除されました。事前構築済み: libdl.so <= /home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libdl.so 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libc.so 依存関係が削除されました。make: 循環 obj/local/armeabi/libdl.so <- obj/local/armeabi/libdl.so 依存関係が削除されました。事前構築済み: libdl.so <= /home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libdl.so
obj/local/armeabi/libdl.so ビルド済み : libm.so <= /home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libm.so obj/ local/armeabi/libm.so make: 循環 obj/local/armeabi/libc.so <- obj/local/armeabi/libc.so の依存関係が削除されました。ビルド済み: libc.so <= /home/oussama064/Android/workspace/FirstTry/jni/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/libc.so obj/local/armeabi/libc.so インストール: libc.so => /home/oussama064/Android/workspace/FirstTry/libs/armeabi/libc.so install -p ./obj/local/armeabi/libc.so
/home/oussama064/Android/workspace/FirstTry/libs/ armeabi/libc.so /home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi- 4.
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libc.so ビルド済み : libxml2.a <=
/home/oussama064/Android/workspace/FirstTry/jni/../../../../ neededLibs/ cp -f
/home/oussama064/Android/workspace/FirstTry/jni/../../../../neededLibs/libxml2.a obj/local/armeabi/libxml2.a ビルド済み : libcurl.a < = /home/oussama064/Android/workspace/FirstTry/jni/../../../../neededLibs/ cp -f /home/oussama064/Android/workspace/FirstTry/jni/../../ ../../neededLibs/libcurl.a
obj/local/armeabi/libcurl.a ビルド済み: libdash.so <= /home/oussama064/Android/workspace/FirstTry/jni/

cp -f /home/oussama064/Android/workspace/FirstTry/jni/libdash.so      
obj/local/armeabi/libdash.so
Install        : libdash.so =>   
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdash.so
install -p ./obj/local/armeabi/libdash.so    
 /home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdash.so
/home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi-
4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-strip --strip-unneeded  
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdash.so
Install        : libdl.so => 
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdl.so

install -p ./obj/local/armeabi/libdl.so 

/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdl.so
/home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm -linux-androideabi-strip --strip-不要

/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libdl.so
Install        : libm.so =>   
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libm.so
install -p ./obj/local/armeabi/libm.so
/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libm.so
/home/oussama064/NDK/android-ndk-r8d/toolchains/arm-linux-androideabi-     

4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-strip --strip-unneeded    

/home/oussama064/Android/workspace/FirstTry/libs/armeabi/libm.so

誰かが私を助けることができれば、私は感謝します。

4

1 に答える 1

0

libm、libc、および libdl 共有ライブラリのシステム バージョンを使用する必要があります。

LOCAL_LDLIBS := -lm -ldl 

できない場合は、静的にリンクしてください。

于 2016-04-10T16:46:14.973 に答える