【问题标题】:Linker failed while linking custom .so library链接自定义 .so 库时链接器失败
【发布时间】:2017-05-07 03:53:39
【问题描述】:

我的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 之前的样子
  • 将项目恢复到以前的提交
  • 将源代码拉取并创建到不同的项目中

另外需要注意的是,相同的代码可以在我大学的计算机上使用相同的 Gradle 和 Android Studio 版本 (2.2.3)

【问题讨论】:

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


    【解决方案1】:

    我已经解决了这个实际上非常愚蠢的问题,但我会让任何遇到过这种情况的人都知道。我的 openCV SDK 文件夹不知何故同步到了我的 iCloud 存储,突然之间,Android Studio 无法再访问那里的文件,并且 gradle 无法为我构建库。 我已将 SDK 文件夹移至非同步文件夹,一切又开始工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      相关资源
      最近更新 更多