Android NDK Linker错误路径

卢卡斯·特斯克(Lucas Teske)

我目前正在使用使用共享库的NDK项目。我有两个共享库要集成:libsatprotocol.so和libsat-tanca.so。

所以我将这些库添加到我的Android.mk中,以便进行包装。对于libsatprotocol,一切正常。但是对于libsat-tanca,我在android上崩溃了:

 java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "/home/lucas/Rockspoon/satlib/Android/app/src/main/obj/local/armeabi/libsat-tanca.so" needed by "libsat-jni.so"; caused by library "/home/lucas/Rockspoon/satlib/Android/app/src/main/obj/local/armeabi/libsat-tanca.so" not found
                                                                              at java.lang.Runtime.loadLibrary(Runtime.java:371)
                                                                              at java.lang.System.loadLibrary(System.java:989)

因此,很奇怪的是,该路径在我用于库的计算机路径中,并且我不知道从何处获取它。如果删除依赖项的libsat-tanca,它可以正常工作(在libsatprotocol中)。

这是我的Android.mk:

LOCAL_PATH := $(call my-dir)
#LOCAL_ALLOW_UNDEFINED_SYMBOLS=true

include $(CLEAR_VARS)

LOCAL_MODULE    := sat-tanca
LOCAL_SRC_FILES := tanca/$(TARGET_ARCH_ABI)/libsat-tanca.so

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := sat-dimep
LOCAL_SRC_FILES := dimep/$(TARGET_ARCH_ABI)/libsatprotocol.so

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := sat-jni
LOCAL_SRC_FILES := satlib.c
LOCAL_LDLIBS    += -L$(SYSROOT)/usr/lib -lz -llog
LOCAL_SHARED_LIBRARIES := sat-tanca sat-dimep

include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := armeabi #armeabi-v7a mips x86 x86_64
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libsatprotocol.so $(TARGET_ARCH_ABI)/libsat-tanca.so

SATControl.java

static {
  System.loadLibrary("sat-jni");
}

build.gradle(应用程序)

应用插件:“ com.android.application”

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.rockspoon.libraries.satlib"
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        ndk {
            moduleName "sat-jni"
        }
    }

    sourceSets.main {
        jni.srcDirs = [] // This prevents the auto generation of Android.mk
        jniLibs.srcDir 'src/main/libs' // This is not necessary unless you have precompiled libraries in your project.
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
        def ndkDir = android.ndkDirectory
        commandLine "$ndkDir/ndk-build",
                '-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
                '-j', Runtime.runtime.availableProcessors(),
                'all',
                'NDK_DEBUG=1'
    }

    task cleanNative(type: Exec, description: 'Clean JNI object files') {
        def ndkDir = android.ndkDirectory
        commandLine "$ndkDir/ndk-build",
                '-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
                'clean'
    }

    clean.dependsOn 'cleanNative'

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn buildNative
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}

知道为什么它仅将libsat-tanca.so与我的PC路径链接吗?

弗朗西斯卡·南尼兹(Francesca Nannizzi)

这里有两件事对我来说似乎是错误的,但是我不确定这是导致链接路径不正确的原因。

1)这行中的$(SYSROOT)变量指向您机器上的路径,对吗?

LOCAL_LDLIBS    += -L$(SYSROOT)/usr/lib -lz -llog

如果目标是链接到zlib和日志库,则可以使用以下内容,并且该版本将执行正确的操作:

LOCAL_LDLIBS    += -lz -llog

2)为什么您的Application.mk中的以下行?您不需要这个,但是我认为它可能不会引起链接问题。

LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libsatprotocol.so $(TARGET_ARCH_ABI)/libsat-tanca.so

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与Android NDK相关的错误

来自分类Dev

OPENCV的ANDROID NDK错误

来自分类Dev

Android Studio构建NDK错误

来自分类Dev

Android NDK编译错误NDK_PROJECT_PATH = null

来自分类Dev

Android NDK源文件的输入路径限制

来自分类Dev

无法编写.bashrc以添加android NDK的路径

来自分类Dev

openssl android ndk-build更改路径

来自分类Dev

Android NDK源文件的输入路径限制

来自分类Dev

突出显示Android NDK错误输出

来自分类Dev

Android NDK r10d错误

来自分类Dev

Android Studio中的ndk.dir错误

来自分类Dev

Android NDK示例本机音频错误

来自分类Dev

Android NDK示例构建错误linux

来自分类Dev

Android NDK r10d错误

来自分类Dev

Android NDK:不满意的链接错误

来自分类Dev

反应原生 Android NDK 丢失错误?

来自分类Dev

android ndk包装的c ++文件获取android系统文件路径

来自分类Dev

Android NDK相机路径getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

来自分类Dev

在Android NDK上使用gtest的语法错误

来自分类Dev

android ndk开发问题:memcpy函数的“无效参数”错误

来自分类Dev

Android NDK集成:错误:无法加载类BuildType $ Impl

来自分类Dev

Ubuntu下Eclipse下Android NDK中的语义错误

来自分类Dev

Android NDK返回错误“未定义对'rand'的引用”

来自分类Dev

Android NDK:未定义的引用错误

来自分类Dev

android ndk中线程中的数学函数返回错误值

来自分类Dev

Android NDK编译器openssl发生错误

来自分类Dev

错误:在android ndk中构建libunwind时需要lo注册

来自分类Dev

在android.mk文件中构建ndk时出现错误

来自分类Dev

Android NDK编译器openssl发生错误