40C币都花了,被禁言了。

lgyu9303 2017-12-18 07:02:54

完整问题为:


```
dlopen failed: cannot locate symbol "AVI_video_height" referenced by "/data/app/com.example.avilibplayert2-1/lib/arm64/libAVILibPlayerT2.so"
```



最近在学习《pre AndroidC++ with NDK》这本书 学习ndk使用,但是学习 原生图型API 时 ndk-build 编译可以正常进行,run之后点击按钮后就会crash 闪退掉(实例的功能是按钮之后播放一段视频),找了好几天的问题不知道怎么回事,特来此请教,还请不吝赐教啊。
详细如下
Android.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的目录如下Android.mk内容如下:
![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589025_451711.png)
就是这个位置


```
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中调用的。如下:
![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589289_555515.png)
![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589301_520052.png)
![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589318_450323.png)
而且里面加载了 包含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)
```

另:我的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'
}

```

测试机Android 6.0 API 23 真机非模拟器


运行时点击 按钮就会 闪退,不清楚为何。ndk开发学习刚刚入门阶段,还请了解情况的大佬不吝赐教。


这是我在提问者 要提交的 提问内容。是关于Android NDK的 没什么 不适当的言论那。而且C币都扣掉了,能解禁么?还有,是与不是,请回复我一下啊,要是哪里不合适我改掉就行了。我是非常非常非常着急的。

...全文
147 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN客服-糊胡 2017-12-19
  • 打赏
  • 举报
回复
您好! 您反馈的问题,正在请产品检查,晚点留言给您。
CSDN客服-糊胡 2017-12-19
  • 打赏
  • 举报
回复
[quote=引用 楼主 lgyu9303 的回复:] 完整问题为: ``` dlopen failed: cannot locate symbol "AVI_video_height" referenced by "/data/app/com.example.avilibplayert2-1/lib/arm64/libAVILibPlayerT2.so" ``` 最近在学习《pre AndroidC++ with NDK》这本书 学习ndk使用,但是学习 原生图型API 时 ndk-build 编译可以正常进行,run之后点击按钮后就会crash 闪退掉(实例的功能是按钮之后播放一段视频),找了好几天的问题不知道怎么回事,特来此请教,还请不吝赐教啊。 详细如下 Android.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的目录如下Android.mk内容如下: ![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589025_451711.png) 就是这个位置 ``` 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中调用的。如下: ![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589289_555515.png) ![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589301_520052.png) ![图片说明](http://img.ask.csdn.net/upload/201712/18/1513589318_450323.png) 而且里面加载了 包含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) ``` 另:我的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' } ``` 测试机Android 6.0 API 23 真机非模拟器 运行时点击 按钮就会 闪退,不清楚为何。ndk开发学习刚刚入门阶段,还请了解情况的大佬不吝赐教。 这是我在提问者 要提交的 提问内容。是关于Android NDK的 没什么 不适当的言论那。而且C币都扣掉了,能解禁么?还有,是与不是,请回复我一下啊,要是哪里不合适我改掉就行了。我是非常非常非常着急的。 [/quote 您好! 因您的问题后台显示异常,现已返还您C币,请重新提问。
珞屿 2017-12-19
  • 打赏
  • 举报
回复
刚刚尝试重新提问,还是原来的内容 还是被提示 频繁操作 请一会儿再试。 而且 C币又被扣掉了 此次悬赏为20 但你却额外扣除了30。但此次提问是未成功的啊,哎。

540

社区成员

发帖
与我相关
我的任务
社区描述
客服专区
其他 技术论坛(原bbs)
社区管理员
  • 客服专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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