2015-08-16 3 views
1

Я собрал .so библиотеку приложения app и java для вызова методов из этой библиотеки. Библиотека, собранная для ARMv7, и приложение отлично работают на реальном устройстве (Nexus 4). Когда я пытаюсь Lauch это приложение на эмуляторе, я получаю следующую ошибку:Ошибка с приложением JNI

dlopen("/data/app-lib/com.opendesign.android-2/test_jni.so") failed: dlopen failed: cannot locate symbol "srand" referenced by "test_jni.so"... 
WARNING: Could not load test*_jni.so 

Для библиотеки нагрузки, у меня есть следующий код:

try { 
      System.loadLibrary("test_architecture_jni"); 
     } catch (UnsatisfiedLinkError use) { 
      try { 
       System.loadLibrary("test_jni"); 
      } catch (UnsatisfiedLinkError use1) { 
       Log.e("JNI", "WARNING: Could not load test*_jni.so"); 
      } 

Android приложение разработано в Eclipse. В корневом каталоге у меня есть каталог «libs» с папками, имена которых называются архитектурами.

На самом деле работа устройства прекрасна, но на эмуляторе этого устройства - авария. NDK - 10с, Android на устройстве - 5, на эмуляторе - 4.2.2, minSdkVersion для Android App = 8.

PS Compile Lib со следующим конфигурационного файла: получение

mkdir -p Platforms/android_armeabi-v7a_r10c_mingw_x64dbg 
export ANDROID_NDK_ROOT="/opt/android-ndk-r10c" 
export ANDROID_NDK_BIN="toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin" 
echo -e "all:\n\tcd Platforms/android_armeabi-v7a_r10c_mingw_x64dbg && make all\nclean:\n\tcd Platforms/android_armeabi-v7a_r10c_mingw_x64dbg && make clean\n" > Makefile 
cd Platforms/android_armeabi-v7a_r10c_mingw_x64dbg 
../../build/cmake/bin/cmake -G "Unix Makefiles" -D ODA_HAS_OPENGL=1 -D ODA_OPENGL_LIBS="GLESv1_CM" -D CMAKE_CXX_COMPILER_WORKS:INTERNAL=1 -D CMAKE_C_COMPILER_WORKS:INTERNAL=1 -D CMAKE_DETERMINE_CXX_ABI_COMPILED:INTERNAL=1 -D CMAKE_DETERMINE_C_ABI_COMPILED:INTERNAL=1 -D CMAKE_SYSTEM_NAME:STRING=gcc -D CMAKE_CROSSCOMPILING:INTERNAL=1 -D ODA_PLATFORM_LIBS:STRING="c;m;dl;gnustl_static" -D ODA_ANDROID_ARCH:STRING="armeabi-v7a" -D CMAKE_REQUIRED_LIBRARIES="-lc -lgnustl_static" -D CMAKE_CXX_STANDARD_LIBRARIES="-lc -lgnustl_static" -D ANDROID=TRUE -D ANDROID_NDK_CRYSTAX=FALSE -D ANDROID_NDK_GOOGLE=TRUE -D CMAKE_CXX_FLAGS:STRING="--sysroot=${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/ -Wno-psabi -fPIC -DANDROID_WCHAR -DANDROID_GOOGLE -DANDROID -DANDROID_NDK_NATIVE -I${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/usr/include -I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.8/include -I${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I. -ffunction-sections -fexceptions -frtti -Wno-psabi -fPIC -Wl,--no-undefined" -D CMAKE_C_FLAGS:STRING="--sysroot=${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/ -Wno-psabi -DANDROID_WCHAR -DANDROID_GOOGLE -DANDROID -DANDROID_NDK_NATIVE -I${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/usr/include -ffunction-sections -fPIC -Wl,--no-undefined" -D CMAKE_CXX_COMPILER:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-g++.exe -D CMAKE_C_COMPILER:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-gcc.exe -D CMAKE_SHARED_LINKER_FLAGS:STRING="-L${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a -L${ANDROID_NDK_ROOT}/sources/libs/armeabi-v7a -L${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/usr/lib -Wl,-no-undefined,-dynamic-linker=/system/bin/linker,-rpath-link=${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/usr/lib -Wl,--no-undefined" -D CMAKE_AR:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-ar.exe -D CMAKE_LINKER:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-ld.exe -D CMAKE_LD:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-ld.exe -D CMAKE_NM:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-nm.exe -D CMAKE_OBJCOPY:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-objcopy.exe -D CMAKE_OBJDUMP:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-objdump.exe -D CMAKE_STRIP:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-strip.exe -D CMAKE_RANLIB:PATH=${ANDROID_NDK_ROOT}/${ANDROID_NDK_BIN}/arm-linux-androideabi-ranlib.exe -D CMAKE_MAKE_PROGRAM:PATH=/usr/bin/make -D CMAKE_LIB_PATH="${ANDROID_NDK_ROOT}/platforms/android-${ANDROID_PLATFORM}/arch-arm/usr/lib" -D CMAKE_BUILD_TYPE=Debug -D CMAKE_CONFIGURATION_TYPES=Debug ../../ 
+0

К сожалению, minSdkVersion не определяет версию платформы для 'ndk-build'. Попробуйте установить 'APP_PLATFORM = 8' –

+0

, это не поможет. –

+0

Он должен. Ваша проблема возникает из-за того, что ваша библиотека скомпилирована на платформе выше той, на которой вы ее запускаете. Как вы компилируете свою библиотеку? – ph0b

ответ

0

Ошибка, потому что эмулятор использует архитектуру x86. Использование lib для x86, это нормально работает

Смежные вопросы