首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFmpeg链接器错误:由于libavcodec共享对象中的文本重新定位而导致的错误

FFmpeg链接器错误:由于libavcodec共享对象中的文本重新定位而导致的错误
EN

Stack Overflow用户
提问于 2014-12-03 19:39:28
回答 1查看 1.5K关注 0票数 2

我正在尝试建立一个安卓应用程序,其中使用视频解码和编码的FFmpeg原生代码。我有一台运行32位Ubuntu 14.04,ADT版本23的64位机器。我下载了FFmpeg-2.4.4 (32位),并按照这里提到的步骤为安卓构建了它- http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

我使用的是最新的Android NDK,也就是NDK r10c。为了进行测试,我使用了以下链接中给出的FFmpeg示例代码:http://ffmpeg.org/doxygen/trunk/decoding__encoding_8c-source.html

我成功地构建了所有的共享对象,Android项目编译成功,没有任何错误。

下面的代码是加载所有共享对象的Android代码

代码语言:javascript
复制
public class CallNative {
public static String libName = "decode_encode" ;
public CallNative(){
    System.loadLibrary("avutil-54");
    System.loadLibrary("swresample-1");
    System.loadLibrary("avcodec-56");
    System.loadLibrary("avformat-56");
    System.loadLibrary("swscale-3");
    System.loadLibrary("avfilter-5");
    System.loadLibrary(libName);
}

public native int decode(String Filename, int length);

}

这就是从Android调用decode函数的方式。

代码语言:javascript
复制
Uri videoURI = Uri.parse(fileUri.toString());
                   String videoFilePath = getFilePathFromURI(getApplicationContext(), videoURI);
                   Log.d("SPLASH","Entering native decode call");
                   CallNative n = new CallNative();
                   n.decode(videoFilePath, videoFilePath.length());
                   Log.d("SPLASH","successfully returned from decode call");

当我调试时,App在进入本机函数调用时崩溃。我得到下面的链接器错误。

代码语言:javascript
复制
W/linker(32244): libavcodec-56.so has text relocations. This is wasting memory and prevents security hardening. Please fix.

我在FFmpeg 2.4.3和2.0.6包中也尝试了同样的方法。我得到了同样的错误。

如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2016-01-19 17:37:44

该代码将在所有android版本低于23的情况下工作。也就是说,如果您将targetSkdVersion设置为21,代码将运行并显示警告。

不幸的是,自从棉花糖(v23)以来,谷歌不再允许加载带有文本重定位的库。因此,如果您将目标sdk版本设置为23,您的应用程序将崩溃。

谷歌不会改变这一行为,请参阅:https://code.google.com/p/android/issues/detail?id=191235&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

Ffmpeg团队不会“很快”删除文本重定位,请参阅:https://trac.ffmpeg.org/ticket/4928

所以目前看来,您唯一的选择就是将目标sdk设置为21。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27270844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档