- 解决UnsatisfiedLinkError: dlopen f
- 解决:dlopen failed: cannot locate
- dlopen failed: cannot locate sym
- 出现Failed to locate a binder for
- Gradle 'MyApp' refresh failed
- 封装静态framework 引入第三方库编辑报错file: XX
- jni 在 android 6 上 cannot locate
- Mac版Androidstudio svn路径 错误
- dlopen() failed to load a librar
- react-native 运行时候出现的BUG
最近在学习音视频,因为我是一名Android开发,所以准备从jni开始一步步学起。因为刚刚开始学,有很多问题不懂。
从网上下载最新ffmpeg之后,用ndk打包成so,就放进demo里面了,但是运行之后,一直报dlopen failed: cannot locate symbol "iconv_open" referenced by "/data/app/com.explain.media-zaq-Uo9-rGBL7yZPOkKkGA==/lib/arm/libavcodec.so"
...这个错误。
问题原因:
在libavcodec.so中找不到iconv_open这个符号,但打开ffmpeg搜索,是可以看到这个符号。我先从网络上找到别人已经打包好的.so文件,放到我的项目里面,运行,成功了。于是就怀疑自己编译的so没有没引进来这个c文件。
解决办法:
我发现我在so打包中(详见《Android FFmpeg学习(一),将FFmpeg编译成so文件》文章),将NDK环境写错了。因为我使用了windows-x86_64,这是windows下面ndk的路径。我是MAC电脑,所以在ndk对应的路径下,只有darwin-x86_64环境,所以将shell脚本中的NDK环境路径修改为正确的路径,重新编译打包,放到Android环境下使用。这次正确了。
网友评论