无法在Solaris 10 sparc上编译FFmpeg

3
有人为Solaris 10 sparc编译了ffmpeg 0.6.1吗?我遇到以下错误:
    uname -a
SunOS SERVERNAME 5.10 Generic_118833-36 sun4u sparc SUNW,Sun-Fire-V440

bwddmadm@bwddmliv>/export/home/USERID/ffmpeg-0.6.1/configure --prefix=/export/home/USERID/ffmpegX --extra-cflags="-fPIC" --disable-mmx --disable-protocol=udp --disable-encoder=nellymoser
Broken shell detected.  Trying alternatives.
Trying shell bash
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
Unknown C compiler gcc
awk: syntax error near line 1
awk: illegal statement near line 1
grep: illegal option -- q
Usage: grep -hblcnsviw pattern file . . .
install prefix            /export/home/USERID/ffmpegX
source path               /export/home/USERID/ffmpeg-0.6.1
C compiler                gcc
.align is power-of-two    no
ARCH                      sparc (generic)
big-endian                no
runtime cpu detection     no
VIS enabled               yes
gprof enabled             no
debug symbols             yes
strip symbols             yes
optimizations             yes
static                    yes
shared                    no
postprocessing support    no
new filter support        no
filters using lavformat   no
network support           yes
threading support         no
SDL support               no
Sun medialib support      no
AVISynth enabled          no
libdc1394 support         no
libdirac enabled          no
libfaac enabled           no
libfaad enabled           no
libfaad dlopened          no
libgsm enabled            no
libmp3lame enabled        no
libnut enabled            no
libopencore-amrnb support no
libopencore-amrwb support no
libopenjpeg enabled       no
librtmp enabled           no
libschroedinger enabled   no
libspeex enabled          no
libtheora enabled         no
libvorbis enabled         no
libvpx enabled            no
libx264 enabled           no
libxvid enabled           no
zlib enabled              no
bzlib enabled             no

Enabled decoders:
pr:  -- empty file

Enabled encoders:
pr:  -- empty file

Enabled hwaccels:
pr:  -- empty file

Enabled parsers:
pr:  -- empty file

Enabled demuxers:
pr:  -- empty file

Enabled muxers:
pr:  -- empty file

Enabled protocols:
pr:  -- empty file

Enabled filters:
pr:  -- empty file

Enabled bsfs:
pr:  -- empty file

Enabled indevs:
pr:  -- empty file

Enabled outdevs:
pr:  -- empty file

License: LGPL version 2.1 or later
Creating config.mak and config.h...
bwddmadm@bwddmliv> gmake
/export/home/USERID/ffmpeg-0.6.1/version.sh: syntax error at line 4: `revision=$' unexpected
CC      libavdevice/alldevices.o
libavdevice/alldevices.c: In function `avdevice_register_all':
libavdevice/alldevices.c:42: error: `CONFIG_ALSA_OUTDEV' undeclared (first use in this function)
libavdevice/alldevices.c:42: error: (Each undeclared identifier is reported only once
libavdevice/alldevices.c:42: error: for each function it appears in.)
libavdevice/alldevices.c:42: error: `CONFIG_ALSA_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:43: error: `CONFIG_AUDIO_BEOS_OUTDEV' undeclared (first use in this function)
libavdevice/alldevices.c:43: error: `CONFIG_AUDIO_BEOS_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:44: error: `CONFIG_BKTR_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:45: error: `CONFIG_DV1394_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:46: error: `CONFIG_JACK_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:47: error: `CONFIG_OSS_OUTDEV' undeclared (first use in this function)
libavdevice/alldevices.c:47: error: `CONFIG_OSS_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:48: error: `CONFIG_V4L2_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:49: error: `CONFIG_V4L_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:50: error: `CONFIG_VFWCAP_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:51: error: `CONFIG_X11_GRAB_DEVICE_INDEV' undeclared (first use in this function)
libavdevice/alldevices.c:54: error: `CONFIG_LIBDC1394_INDEV' undeclared (first use in this function)
gmake: *** [libavdevice/alldevices.o] Error 1
bwddmadm@bwddmliv> exit

script done on Fri Jan 14 11:34:05 2011
4个回答

4

1.- 确保已安装gcc

install gcc if needed
# pkg search gcc
# pkg install pkg:/developer/gcc-45@4.5.2-0.175.1.0.0.24.0

2.- 确保已安装yams

install yams if needed
download from http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
unzip, untar in local dir
#./configure
#make install
add the path
# PATH=$PATH:/usr/local/bin

3.- 确保已安装GNU Make

Installed if required
# pkg search gnu make
# pkg install pkg:/developer/build/gnu-make@3.82-0.175.1.0.0.24.0

4. 确保它选择正确的grep

e.g. by aliasing grep to /usr/sfw/bin/ggrep if you have the Sun Freeware package installed

5.- 下载源代码: http://ffmpeg.org/releases/ffmpeg-1.0.tar.gz

a.- unzip, untar in local dir
b.- edit configure
    1.- replace awk by nawk
    2.- follow the patch configuration from https://trac.handbrake.fr/browser/trunk/contrib/patch-ffmpeg-solaris.patch?rev=1531
        Some details about the reasons here : http://www.techques.com/question/1-4690966/can't-compile-ffmpeg-on-Solaris-10-sparc
        Be careful the line numbers are not valid for version 1.0
        place the modifications suggested accordingly 
c.- #./configure
d.- # gmake

Noël Jaffré


3

很遗憾,Solaris /usr/bin/grep不支持-q标志,看起来您需要将路径设置为GNU grep或符合POSIX的/usr/xpg4/bin/grep作为grep命令。Google还可以找到一些人编写的解决此问题的ffmpeg补丁。

ffmpeg作者知道这个问题, 但拒绝更改他们的配置脚本,因为他们依赖于POSIX兼容性。


谢谢,我今天会看一下。我找不到你所提到的补丁,你能给个链接吗? - Raoul
嗨,我尝试通过以下方式为grep创建别名:alias='/usr/xpg4/bin/grep',然后重新执行配置部分,但仍收到相同的错误信息。 - Raoul
1
类似configure的脚本在新的shell进程中运行,不会从当前的shell进程中获取别名 - 您必须更改您的路径。我所提到的补丁位于链接 https://trac.handbrake.fr/browser/trunk/contrib/patch-ffmpeg-solaris.patch?rev=1531 等处。 - alanc
谢谢,这个补丁已经三年了,在我下载的当前版本的ffmpeg中没有匹配的行。我搜索了一下谷歌,也找不到适用于这个0.6.1版本的补丁。我已经解决了很多问题(请参见我与ShiDoiSi的对话)。配置工作正常,但我卡在了“make”这一步。你有安装ffmpeg吗?再次感谢你的所有建议。 - Raoul
不好意思,我从未构建或使用过ffmpeg。 - alanc

0

看起来构建脚本期望找到GNU版本的辅助工具,比如grep。确保它选择正确的版本,例如通过别名将grep重命名为/usr/sfw/bin/ggrep(如果已经安装Sun Freeware包)。


嗯,好问题。然后只需使用名称为“grep”的符号链接将其链接到某个地方,并将该地点放在PATH的前面即可。 - Volker Stolz
谢谢您的反馈,我会测试一下并告诉您结果。 - Raoul
是的,我成功地从源代码安装了它,现在在配置阶段不再收到任何警告。谢谢你。问题在于在编译阶段我仍然得到上面列出的相同错误。 - Raoul
好的,链接出现了问题,因为它选择了系统链接器“ld”,而不是GNU链接器“gld”;以及汇编器(g)as,所以就像你处理(g)grep一样处理这个问题。重复以上步骤。 - Volker Stolz
ShiDoiSi,非常感谢你迄今为止提供的所有帮助,你能否建议一些解决这个配置问题的方法? - Raoul
显示剩余9条评论

0

在这个主题上花了几个小时后,我终于在Solaris 5.1 SPARC上安装了ffmpeg 2.2.2。步骤:

  • http://www.ffmpeg.org/download.html下载最新版本的tar源码
  • 解压tar文件
  • Grep应该指向GGREP - 别名grep = /usr/sfw/bin/ggrep
  • 使用bash而不是sh - 需要修改配置和version.sh文件的第一行
  • 使用nawk而不是awk
  • 配置处理隐式函数声明警告作为错误。这可能会导致问题 - 我不得不将其设置回警告级别,因为它引起了一个缺失引用的错误(这是一个标准库,所以不应该是一个问题)
  • 关于4-6点,请使用以下命令
  • sed 's/\/bin\/sh/\/bin\/bash/' configure > configure.mod
  • sed 's/awk/nawk/' configure.mod > configure.mod2
  • sed '/implicit-function-declaration/d' configure.mod2 > configure.mod3

  • cp configure.mod3 configure

  • sed 's/\/bin\/sh/\/bin\/bash/' version.sh > version.sh.mod
  • cp version.sh.mod version.sh

  • 运行configure

  • configure --extra-cflags="-fpic" --disable-mmx --disable-protocol=udp --disable-encoder=nellymoser --disable-debug --arch=sparc --target-os=sunos

  • gmake install

  • 启动ffmpeg:./ffmpeg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接