2016-11-15 56 views
0

更新:我注意到,控制台输出是给我:错误建设有NDK Android项目:在通用ELF重定位(EM:40)

Error while executing 'C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\ndk-build.cmd' with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Users\bowli\Documents\Projects\AndroidStudioProjects\CDP_AR1\app\src\main\jni\Android.mk NDK_APPLICATION_MK=C:\Users\bowli\Documents\Projects\AndroidStudioProjects\CDP_AR1\app\src\main\jni\Application.mk APP_ABI=mips NDK_ALL_ABIS=mips NDEBUG=1 APP_PLATFORM=android-14 NDK_OUT=C:/Users/bowli/Documents/Projects/AndroidStudioProjects/CDP_AR1/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=C:\Users\bowli\Documents\Projects\AndroidStudioProjects\CDP_AR1\app\build\intermediates\ndkBuild\debug\lib C:/Users/bowli/Documents/Projects/AndroidStudioProjects/CDP_AR1/app/build/intermediates/ndkBuild/debug/obj/local/mips/libcdpp_jni.so} 

通知

APP_ABI=mips NDK_ALL_ABIS=mips

它出现Android.mk和Application.mk的值在某处被覆盖。现在我要试着找出它发生的地方。

BASE问题:

我尝试建立与所提供的本地库的Android应用程序:升压,MetaIO等的应用程序是全功能的,我应该只是一个新的功能添加到它。然而,当我试图建立它,我得到以下错误:

Error:process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
process_begin: CreateProcess(NULL, "", ...) failed. 
 

 
C:/Users/bowli/Tools/Android/android-ndk/android-ndk-r8e/toolchains/mipsel-linux-android-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/mipsel-linux-android/4.6/../../../../mipsel-linux-android/bin/ld.exe: C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\sources/boost/android/lib/libboost_filesystem.a(path.o): Relocations in generic ELF (EM: 40) 
 
C:/Users/bowli/Tools/Android/android-ndk/android-ndk-r8e/toolchains/mipsel-linux-android-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/mipsel-linux-android/4.6/../../../../mipsel-linux-android/bin/ld.exe: C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\sources/boost/android/lib/libboost_filesystem.a(path.o): Relocations in generic ELF (EM: 40) 
 

 
*the same line over9000 times (around 40 actually)* 
 

 
C:/Users/bowli/Tools/Android/android-ndk/android-ndk-r8e/toolchains/mipsel-linux-android-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/mipsel-linux-android/4.6/../../../../mipsel-linux-android/bin/ld.exe: C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\sources/boost/android/lib/libboost_filesystem.a(path.o): Relocations in generic ELF (EM: 40) 
 
C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\sources/boost/android/lib/libboost_filesystem.a: could not read symbols: File in wrong format 
 
collect2: ld returned 1 exit status 
 
make: *** [C:/Users/bowli/Documents/Projects/AndroidStudioProjects/CDP_AR1/app/build/intermediates/ndkBuild/debug/obj/local/mips/libcdpp_jni.so] Error 1

我绝不是与本地开发和配置这方面的专家,但是在网上冲浪导致我这个结论是boost并没有为我正在编译的相同体系结构编译。因此,我尝试了所有更改Application.mk中的ABI来找出boost目标体系结构。我尝试了支持的ABI列表(https://developer.android.com/ndk/guides/abis.html)中的所有ABI,并且都产生相同的错误。

然后我试图更改一个专门对ARMv7(https://github.com/emileb/Boost-for-Android-Prebuilt)编译给定的Boost库,但是这给了我本质上是相同的错误:

C:/Users/bowli/Tools/Android/android-ndk/android-ndk-r8e/toolchains/mipsel-linux-android-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/mipsel-linux-android/4.6/../../../../mipsel-linux-android/bin/ld.exe: C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\sources/boost/armeabi-v7a/lib/libboost_filesystem-gcc-mt-1_53.a(path.o): Relocations in generic ELF (EM: 40) 
 
C:\Users\bowli\Tools\Android\android-ndk\android-ndk-r8e\sources/boost/armeabi-v7a/lib/libboost_filesystem-gcc-mt-1_53.a: could not read symbols: File in wrong format 
 
collect2: ld returned 1 exit status 
 
make: *** [C:/Users/bowli/Documents/Projects/AndroidStudioProjects/CDP_AR1/app/build/intermediates/ndkBuild/debug/obj/local/mips/libcdpp_jni.so] Error 1

我Application.mk :

APP_ABI  := armeabi-v7a 
APP_STL  := gnustl_static 
APP_CPPFLAGS := -fexceptions 
APP_CPPFLAGS += -fpermissive 
APP_CPPFLAGS += -frtti 

另外我不得不指定:

TARGET_ARCH_ABI := armeabi-v7a 

在我的Android.mk中,否则它想为某些原因建立mips。

回答

2

好的,我想通了。

不知怎的,我摇篮构建文件该模块被重写ABI规范以MIPS。

我最终加入以下到我的build.gradle来解决这个问题:

android { 
... 

    defaultConfig { 
     ... 

     ndk { 
      // Specifies the ABI configurations of your native 
      // libraries Gradle should build and package with your APK. 
      abiFilters 'armeabi-v7a' 
     } 
    } 
    ... 
} 

更多信息:https://developer.android.com/studio/projects/add-native-code.html#link-gradle