不能指望问答了,希望大牛能没事看看论坛吧! Android ndk 的问题:“lopen failed: cannot locate symbol "”

lgyu9303 2017-12-19 02:26:00
最近在学习《pre AndroidC++ with NDK》这本书 学习ndk使用,但是学习 原生图型API 时 ndk-build 编译可以正常进行,run之后点击按钮后就会crash 闪退掉(实例的功能是按钮之后播放一段视频),找了好几天的问题不知道怎么回事,特来此请教,还请不吝赐教啊。
详细如下 Amdroid.mk 文件内容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := AVILibPlayerT2

LOCAL_SRC_FILES := \
Common.cpp \
com_example_avilibplayert2_AbstractPlayerActivity.cpp \
com_example_avilibplayert2_BitmapPlayerActivity.cpp

LOCAL_STATIC_LIBRARIES += avilib_static
LOCAL_LDLIBS += -ljnigraphics
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
include $(BUILD_SHARED_LIBRARY)

$(call import-module,transcode-1.1.7/avilib)

模块下的目录如下:

在transcode-1.1.7/avilib中的Android.mk文件内容如下:

(就是这个位置)

LOCAL_PATH:=$(call my-dir)
#
#转码AVILib
#

#源文件
MY_ABILIB_SRC_FILES:= avilib.c platform_posix.c

#包含导出路径
MY_AVILIB_C_INCLUDES := $(LOCAL_PATH)

#
#AVILib静态
#
include $(CLEAR_VARS)

#模块名称
LOCAL_MODULE := avilib_static

#源文件
LOCAL_SRC_FILES := $(MY_AVILIB_SRC_FILES)

#包含导入路径
LOCAL_EXPORT_C_INCLUDES := $(MY_AVILIB_C_INCLUDES)

#构建静态库
include $(BUILD_STATIC_LIBRARY)

#
#AVILib共享
#

include $(CLEAR_VARS)

#模块名称
LOCAL_MODULE := avilib_shared

#源文件
LOCAL_SRC_FILES := $(MY_AVILIB_SRC_FILES)

#包含导出路径
LOCAL_EXPORT_C_INCLUDES := $(MY_AVILIB_C_INCLUDES)

#构建共享库
include $(BUILD_SHARED_LIBRARY)


报错当中的AVI_video_getheight()是 avilib.c文件中的。是通过 com_example_avilibplayert2_AbstractPlayerActivity.cpp中调用的。如下:



而且里面加载了 包含AVI_video_getheight()的 头文件:


jint Java_com_example_avilibplayert2_AbstractPlayerActivity_getHeight
(JNIEnv * env, jclass clazz, jlong avi){
return AVI_video_height((avi_t*)avi);
}



12-18 13:17:51.863 17958-17958/com.example.avilibplayert2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.avilibplayert2, PID: 17958
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "AVI_video_height" referenced by "/data/app/com.example.avilibplayert2-1/lib/arm64/libAVILibPlayerT2.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:384)
at java.lang.System.loadLibrary(System.java:1086)
at com.example.avilibplayert2.AbstractPlayerActivity.<clinit>(AbstractPlayerActivity.java:51)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1070)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2349)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
at android.app.ActivityThread.access$900(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5621)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

运行时点击 按钮就会 闪退 在网上找了到很多解决方法,但都没有什么针对性,请哪位能不吝赐教。提前感谢。
...全文
856 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa978147666 2018-01-04
  • 打赏
  • 举报
回复
我有安卓协议的需求,请加我Qq:978147666
  • 打赏
  • 举报
回复
是不是你没把那个avlib.c 编译进去 如果你avlib.c编译到另外一个库的话 你编译的这个库要来连接你这个库
little_crazy_code 2018-01-03
  • 打赏
  • 举报
回复
我也出现这种问题
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Z14AVI_frame_sizeP5avi_tl" referenced by "libAVIPlayer.so"...
little_crazy_code 2018-01-02
  • 打赏
  • 举报
回复
引用 4 楼 lgyu9303 的回复:
引用 2 楼 m0_37657114 的回复:
您好,想问一下avilib.h怎么配置进去的,我的一直是could not find avilib.h
需要在transcode文件夹里面 添加Android.mk文件 在里面描述avilib.h的引用问题。
我也配置了Android.mk文件 ,并且把transcode-1.1.7放置到了ndk-bundle 下的sources文件夹下,但是引用不到这个外部模块。(我用的开发工具是Android studio,开发系统是win10系统),是不是由于开发的软件没有配置NDK_MODULE_PATH的功能呢??
kingiis 2017-12-29
  • 打赏
  • 举报
回复
珞屿 2017-12-29
  • 打赏
  • 举报
回复
引用 2 楼 m0_37657114 的回复:
您好,想问一下avilib.h怎么配置进去的,我的一直是could not find avilib.h
需要在transcode文件夹里面 添加Android.mk文件 在里面描述avilib.h的引用问题。
little_crazy_code 2017-12-28
  • 打赏
  • 举报
回复
您好,想问一下avilib.h怎么配置进去的,我的一直是could not find avilib.h
珞屿 2017-12-19
  • 打赏
  • 举报
回复
另外 build.gradle 文件如下

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.0'
    defaultConfig {
        applicationId "com.example.avilibplayert2"
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main.jni.srcDirs = []
    //禁止自带的ndk功能
    sourceSets.main.jniLibs.srcDirs = ['src/main/libs','src/main/jniLibs'] // <-- 你的.so库的实际路径
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧