找回密码
 注册
查看: 4866|回复: 0

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
3 F. S: x+ q! ?  A7 @% E. v  s+ M8 C3 e3 v) `2 A5 X
下载地址:( ~# o. h1 g  N3 p1 {
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar0 z2 v' j! S' H# J

" l4 i9 f' _% Z' p1 x; l7 L        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。
/ V; N/ d2 |8 M7 D" C& P, q* ?3 _5 b2 d7 Z7 k5 q% X
科普开始
1 B, Q* X0 k9 P2 R5 |  j8 t' B
1、编译问题
, @4 x1 A' S6 y! q7 F8 ^, p: h由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
; D4 b+ T8 C9 N7 k9 }; X4 W& E' F. O解决办法:在函数开头统一定义变量7 o* a# r: x/ K8 H2 V9 b

- R+ t; T4 B5 L3 e9 c/ J9 J: r1 B. |  Ee.g4 r) ?) S2 t9 R3 y
6 M0 P- L1 @- @! @4 G8 R% j- Z) ?
编译不过8 W' V* s# X' K: S- r
void funA() {                              void funA() {- w: |* l$ ^1 l1 z
   int i,j;                                        int i,j,x;
/ [! B/ v( q" a* r! }   i = 0;            ========>         i = 0;& {( k/ _6 K3 @7 p5 q2 t
   int x = 0;                                   x = 0;. t  J7 |, Y! E, E! W$ x
}                                               }& X& {  `: R# J

* ?; ]  s9 |; Q0 R2、链接问题
) ~) D  ~  J$ U! k# a% [0 H. h* D; u' K1 [% z
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用
" f+ r8 z+ H8 H5 K7 K/ C* c1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用) @" b7 }* _, p- s* y, L9 a
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用$ `+ S- L  a7 x$ x* \: N: @
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用
( k" F  o8 f9 F; n9 K0 C1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用! _6 I5 n/ A/ e; Z0 ~0 B
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用2 T5 o' p& f& ?2 z6 k& X

* S3 E/ d9 P2 n6 o& p由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。  Q  S( J# I: G  k" g
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。( X4 M; c: s; ?6 d) w, ^) l7 m

  n3 y# G+ u! berror LNK2019 unresolved external symbol _log2f
/ }8 b; k2 f$ c, Y! L6 z8 x另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :4 I' I7 |8 j) h' f( [3 B2 `
8 S& N6 X' [  i% a; ]( p
#ifdef _MSC_VER
& v( T. m: ]8 r% ~#define inline __inline1 `" t1 W5 j9 m8 r& e9 K" c+ p
#define strcasecmp stricmp
7 j3 q/ ?8 w/ w0 O2 z#define strncasecmp strnicmp
( W  [' o" ~5 O+ ~% s% z) R* j6 S#define snprintf _snprintf) H- H8 H- \% n8 @; [
#define fseek _fseeki64
- F" Z; ]9 }- O#define ftell _ftelli64
! C' J8 M4 D' `' @5 C#define isfinite _finite
6 ^9 A# j5 R2 i9 d7 K4 C#define strtok_r strtok_s- O7 }  R4 m0 c$ s2 A/ @
#define _CRT_SECURE_NO_DEPRECATE# ^: O, Q3 W: T; r" A7 F" R3 F, g
#define X264_VERSION "" // no configure script for msvc* W) ?. J$ e7 c: X/ e8 q
#define log2f(x) (logf(x)*1.4426950408889634f)1 x9 z5 A; }; P' e
#endif! ]! m5 T7 w$ I* S8 f* m2 W

9 }  R& E9 K* Z+ {( B5 E* d4 {! J或 :! ~/ k  L6 Z; S$ [5 K# _9 l" K( B
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
5 y- N$ [+ o% E3 d( E8 U& Z- u5 i
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 23:06 , Processed in 0.017191 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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