找回密码
 注册
搜索
查看: 4666|回复: 0

VS2008下最新X264(svn 2009.0216)编译不过的解决办法(附编译通过+修改内存泄露版本)

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)7 k( I" O( K3 n( e/ d4 x0 B. v5 b
! U; R$ K! N7 K
下载地址:6 x6 U! @, _8 Z! l4 L: r
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar
$ O, y$ V5 C5 j. w3 |( y. A' V8 e! n# }8 `/ ~. n) r
        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。2 r: u; {' o$ [

8 s" ~" H" v8 v1 t( \+ C/ N科普开始
( M8 G1 |! K( E* n: Q* E
4 Q% O) }$ v5 I8 x  l/ r( ~8 d1、编译问题
" b5 K1 ?) I$ D/ ]由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
4 [# _! ^/ ]; h2 c解决办法:在函数开头统一定义变量
- F1 q2 q/ g  X8 z% \# u' H& n+ Y4 z% C6 m9 n" T( O
e.g
: P+ [" `; b6 ?9 A' E  |' g8 a- s' K& g& r
编译不过
6 z' F! R9 a2 O4 }void funA() {                              void funA() {
, Y% Q; L& D) K' J7 v9 t7 A7 H3 a   int i,j;                                        int i,j,x;/ m) M' H* y$ r% L; Q" k
   i = 0;            ========>         i = 0;6 _; ]  [% i8 E, ?' C! w
   int x = 0;                                   x = 0;
' {& }- _5 G. K. q$ y1 c1 N}                                               }3 i9 S* z& H( w, M6 u

+ F% C/ A$ G2 c! Y- K4 W2、链接问题" c: Y1 C" \5 e1 Q$ `

$ G' d' p4 }6 |& Qlibx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用
/ [- u1 J. n1 b8 Z1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
. e+ w! I" M) Y) F1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用0 q6 b2 {+ e) u, y) z
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用. g' H2 n  v5 e: s' j  W
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用3 X& x. ^) t8 b$ Y7 h
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用: d5 d: m/ D6 E

4 G; @: Q" N* Q' X& i( X由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。
. B, |1 j; L- f把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。; G* u1 A+ N9 ^+ d/ A, B5 g

; L' i4 H, p3 e; C4 M* Ierror LNK2019 unresolved external symbol _log2f8 ~  y8 _' d, R  H5 u
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :9 J& g) |% ?% J& y- j4 l; G8 S
8 _# m6 a% k% k0 h! x; W7 N4 v
#ifdef _MSC_VER
: [' Q7 j9 `+ b* K/ {+ t#define inline __inline
/ z/ e( m# z* E) L: d% @' k4 C/ v2 p; F#define strcasecmp stricmp; U: k4 ~% F# S' M: ^; L2 g3 T
#define strncasecmp strnicmp! r" i; S! t& t1 ?
#define snprintf _snprintf& w# p( X  j1 i$ d/ j
#define fseek _fseeki64
( q% b: ~, ]2 ?/ ]4 l0 p- Q- A#define ftell _ftelli64+ _% F, S# ^: G" k0 p) e9 G
#define isfinite _finite
* g3 a4 |: T/ A9 C) j# X( V1 P" A#define strtok_r strtok_s
! l  b  b, R4 K# U#define _CRT_SECURE_NO_DEPRECATE
6 ~6 m1 T8 z/ m' `4 S: y" x#define X264_VERSION "" // no configure script for msvc
' q- E, j4 _3 \4 k2 p#define log2f(x) (logf(x)*1.4426950408889634f)
! y8 ]' a! r/ [: F( ^0 Z  Q#endif
) X6 ]  o  v; V! A4 |8 x( x3 K+ }, W0 l! D8 _3 l' P
或 :( L- Z: [+ w8 b  D
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
; N, q, e! `2 I) V# [  K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-5-2 08:54 , Processed in 0.022117 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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