找回密码
 注册
关于网站域名变更的通知
查看: 383|回复: 1
打印 上一主题 下一主题

cygwin下编译最简单的ffmpeg

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-10 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
( O. I/ G: Z3 E2 B
网上很多是在mingw/msys环境下编译ffmpeg的。  \9 ]+ w& B( }0 f! _# y: L

: s1 M" ^2 j9 n" J这里说说我在cygwin下编译的过程和问题。
4 E3 t7 @5 f( Y& J$ c1 b' _2 K1 s7 e( d+ G% q# |& @
1、首先安装cygwin;6 ^) N. `7 _: r+ ^' B! r3 D/ J  G

4 ~$ U% o$ [8 @( ~( ?# n2、下载ffmpeg源码包:
: e9 e7 z6 l9 r) B! e- n0 h2 ~( G" C' o' [0 V5 s. B& {2 V
3、下载ffmpeg源码后,解压到相应目录下;打开cygwin,进入ffmpeg相应目录;2 e  N, w, N. U3 Y

3 c; v8 k# D% \1 B7 `/ T: m4、开始编译,运行以下命令:4 }! q7 Z6 I, ]8 }( C( y7 g7 X. E
./configure --enable-shared --enable-small --disable-vhook& Q  `) R: }$ H$ v
make: h* q4 `9 m! r  @* c# _6 v
make install
) Q* D( x* _/ @, W
. B+ x0 y% ^; P说明:
8 B/ n) y* M6 b4 ]; r$ V+ S1)这次安装只是测试整个安装过程,所以配置的参数我只选了最基本的,如果想编译真正有用的ffmpeg,必须下载其它音频、视频解码库,比如faac、mp3lame、x264等等;
/ _' o9 y: i# y9 g6 u3 x& d# W
* d' v+ c# I0 |2)在执行./configure过程中,曾经出现以下报错:
0 T3 t: V3 C0 h9 m- S0 t% r- H./configure
( C4 v' A2 _  j3 C" _./configure: line 9: $'\r': command not found* Q. R6 }. c. o6 P/ k- ~' U
./configure: line 12: $'\r': command not found
: W' h7 `3 m* e- S./configure: line 13: syntax error near unexpected token `$'{\r''! ^7 q, {1 ?& [$ n3 v# k
'/configure: line 13: `try_exec(){* Z" @1 |- [' `# r! `1 d% f7 @
...
. k; O8 t( f4 s" \7 @4 w- z- @3 p这是因为我用的是SVN去下载ffmpeg源码,这个./configure文件中的换行是'\r\n',cygwin无法识别导致的,解决办法有几种:A)在linux下或cygwin下用svn去获取ffmpeg代码;B)使用工具替换'\r\n' -> '\n',我就是用UltraEdit去修改搞定的;C)通过google搜索以下关键词“ffmpeg configure unexpected token”;
: ~; q& f. a9 u% u
! i+ c8 t( [- d1 E3)在执行make命令过程中,又出现以下错误:' @* s* ]2 ]5 ^/ n
/cygdrive/e/package/ffmpeg_package/ffmpeg_x264_src_20071007/ffmpeg/libavcodec/mp9 M* i' Y3 @, o$ n$ S  s
egaudiodec.c:362: undefined reference to `_llrint'# Z" y/ ~* t1 r- j" ?0 `; t+ ?
Info: resolving _ff_sqrt_tab by linking to __imp__ff_sqrt_tab (auto-import)
; \; K$ c" p9 _) n3 J. ^+ D...
, B# b$ z3 U0 `+ G3 {0 o原因是llrint()这个函数是用在mingw中的,cygwin并不支持它。这个好像是一个数学相关的函数。可以通过google搜索“ffmpeg  llrint”来查找这个问题。我们要么修改ffmpeg代码,要么给cygwin打patch。打patch的话可以参考这个链接:  @$ I2 R# l7 `$ A
我就参考它的建议修改了mpegaudiodec.c的代码:5 l8 J0 ~+ R' l8 \
把两个llrint()函数替换成lrint(),结果编译成功了。7 `$ p9 d$ V1 ^
( w3 k# I/ |; c+ h, L0 P$ a
5、终于搞定!
2 F. C  S' m# H9 h5 ~+ p( l回到windows目录下,看到已经生成了ffmpeg.exe/ffserver.exe,但是这个时候运行会报错。因为刚才我们是用动态方式编译的,所以生成的动态的dll:cygavcodec-51.dll/cygavformat-51.dll/cygavutil-49.dll,但是这些dll生成后,是放在类似libavcodec的目录下,所以要么加入到系统环境目录中,要么把他们拷贝出来与ffmpeg.exe放在同一目录下。! f- K( m! W5 l$ C4 }, Q
最后,也必须对cygwin的一系列dll加载到windows的系统PATH中。7 l( l; ~& u) X" p1 S
0 [. @7 @. D4 \6 l; }
OK,现在可以运行生成的ffmpeg了!!

该用户从未签到

2#
发表于 2021-3-10 10:54 | 只看该作者
cygwin下编译最简单的ffmpeg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 19:50 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表