链接自定义.so库时链接器失败

时间:2016-12-21 16:33:59

标签: android android-studio gradle android-ndk build.gradle

当我点击更新并且项目不再构建时,我的Android Studio或我的gradle-wrapper或其他内容发生了某些事情。

这是我的错误日志:

Error:Execution failed for task ':app:myLibArm64-v8aDebugSharedLibrary'.
A build operation failed.
Linker failed while linking myLib.so.
See the complete log at: file:///mypath/app/build/tmp/myLibArm64-v8aDebugSharedLibrary/output.txt

output.txt说:

android-ndk/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-
x86_64/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-
linux-android/bin/ld: cannot find -lopencv_java3 
collect2: error: ld returned 1 exit status

此处还有我的gradle代码:

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.3"

        defaultConfig.with {
            applicationId "my.app"
            minSdkVersion.apiLevel = 16
            targetSdkVersion.apiLevel = 23
            versionCode 1
            versionName "1.0"
            vectorDrawables.useSupportLibrary = true
        }

        ndk {
            moduleName = "MyApp"
            cppFlags.add("-I${file(getOpenCVDir())}/sdk/native/jni/include".toString())
            cppFlags.add("-frtti")
            cppFlags.add("-fexceptions")
            cppFlags.add("-std=c++11")
            ldLibs.addAll(["log", "opencv_java3"])
            stl = "gnustl_static"
        }

        abis {
            create("arm64-v8a") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/arm64-v8a".toString())
            }
            create("armeabi") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/armeabi".toString())
            }
            create("armeabi-v7a") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/armeabi-v7a".toString())
            }
            create("mips") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/mips".toString())
            }
            create("mips64") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/mips64".toString())
            }
            create("x86") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/x86".toString())
            }
            create("x86_64") {
                ldFlags.add("-L${file(getOpenCVDir())}/sdk/native/libs/x86_64".toString())
            }
        }
    }
}

我在classpath 'com.android.tools.build:gradle-experimental:0.8.3',我使用distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip libopencv_java3.so位于abis {}

中指定的每个文件夹中

我已经尝试过的事情:

  • 完全卸载并重新安装Android Studio
  • 文件 - >使缓存无效并重新启动
  • ./ gradlew clean and Build - >清洁项目
  • 更改ndk版本(我使用过r12和r13)
  • 将gradle版本更改回2.10并将实验更改为0.7.0之前的版本
  • 将项目还原为上一次提交
  • 拉动并将源创建到不同的项目中

另外需要注意的是,同样的Grader和Android Studio版本(2.2.3)同样可以在我学院的计算机上运行。

1 个答案:

答案 0 :(得分:0)

我已经解决了实际上非常愚蠢的问题,但我会让任何体验过此事的人知道。我的openCV SDK文件夹以某种方式与我的iCloud存储同步,突然之间,Android Studio无法访问那里的文件,并且gradle无法为我构建库。 我已将SDK文件夹移动到非同步文件夹,所有内容都重新开始工作。