如何在Android上将ffmpeg构建为位置无关的可执行文件(PIE)或PIC?

时间:2016-03-22 06:09:50

标签: android ffmpeg

我已从官方网站查看了最新的ffmpeg来源。我现在想要编译和构建ffmpeg作为位置无关的可执行文件。

这是我的configure命令的样子

./configure --prefix=/usr/local --enable-gpl --enable-pic --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265

我添加了选项--enable-pic以使其成为PIE。但是,当构建过程成功完成并且我按如下方式进行强化检查时,我得到以下输出

tough-check ffmpeg

ffmpeg:
Position Independent Executable: no, normal executable!
Stack protected: yes
Fortify Source functions: yes (some protected functions found)
Read-only relocations: yes
Immediate binding: no, not found!

这告诉我ffmpeg仍然不是PIE。有谁能告诉我,我在这里失踪了什么?是否需要进行任何其他更改以添加PIE支持。

2 个答案:

答案 0 :(得分:2)

您需要在配置脚本中添加-fPIE和-pie选项到CFLAGS和LDFLAGS,如下所示:

./configure <other options> \
 --extra-cflags="-I../x264 -mfloat-abi=softfp -mfpu=neon -fPIE -pie" \
 --extra-ldflags="-L../x264 -fPIE -pie"

最新的脚本已经进行了这些更改。

答案 1 :(得分:0)

不要混淆PIE和PIC,特别是在你的参数中并将-pie传递给你的链接器选项 - PIC用于共享库而不是可执行文件

https://fedoraproject.org/wiki/Changes/Harden_All_Packages