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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
7 z$ m3 z: q; g9 U, l" ]7 S7 U7 ]% `1 J0 K
下载地址:
$ r, ]* f- P- {3 y3 Khttp://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar
, g8 Z0 P0 P4 h* o: l$ D( E1 ^
3 [: s4 }. d# U3 }3 A        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。% @- |, W4 @1 f5 `; b! P0 W2 E
0 T7 f, y$ U* @
科普开始
: U# ?! e5 N. e. l1 ~4 O6 Q( E5 u$ l8 I6 a% |
1、编译问题
) y3 @+ C# Q2 J; x6 O8 W' B由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
7 e$ }' J6 B/ ^5 a, ^" ~! ^2 H解决办法:在函数开头统一定义变量/ `# {' |( T/ P4 ?( o) g/ s

( `, t  \( c* y! V$ `% ee.g9 d+ s; W5 U! p0 C
: {) p; ?/ N7 z+ a- W+ h# Q6 x
编译不过5 d8 M* e; \1 t' w
void funA() {                              void funA() {% C: {% P$ m( }+ T9 A9 A  g- H3 k
   int i,j;                                        int i,j,x;
2 T" a1 c. t3 R1 w3 V   i = 0;            ========>         i = 0;& ^, ~2 N; q) x4 z
   int x = 0;                                   x = 0;( C; O, I2 d# Q3 n
}                                               }, `: ~* E" W- Q/ v! P
2 `3 {+ B  p& v9 K7 F
2、链接问题3 Q+ l1 h6 e8 S/ F' S" e
6 D' J2 b, k( w. w
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用
- G% y& k; v% h' A) b. f7 S1 e. I1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
. [5 y/ P* e% z; C/ H' H1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用- f. U. Q' Q) N* y
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用
0 K; u5 H+ m4 c* Y1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用
/ u$ c4 x9 S5 B; j  X- x# a) N1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用
" ~' Y: B2 V: T% Z- n0 k+ d$ i2 \1 v7 K  V+ A
由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。
% a5 j& V6 ?* ~把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
" t" S$ g9 C) ~: d; y! t: S3 L9 H5 p0 Q. Q* M) J7 d. l9 Z% D
error LNK2019 unresolved external symbol _log2f
* s# G: C( ]! M2 N, ?另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :
- S. D; z9 {# _% I' g4 z3 J0 t0 J
+ n3 E7 ^4 W0 a# h" D- Z9 B6 S: e#ifdef _MSC_VER8 ?$ I) n% w" O* f, O% _! \
#define inline __inline
7 l6 q2 Y  v+ ^9 q# F- m#define strcasecmp stricmp
! m+ G; S. X! T- K#define strncasecmp strnicmp7 m6 s+ o1 K8 ?' D* B; ]
#define snprintf _snprintf
" v8 u: ]' ~0 A( R#define fseek _fseeki64
4 b8 O, }5 @: S- l#define ftell _ftelli64
! K4 Z- N+ W% R8 T2 {( }#define isfinite _finite
& F! J. i. ?& i! R2 j3 @' P#define strtok_r strtok_s3 j2 S2 V; I/ H- E6 W
#define _CRT_SECURE_NO_DEPRECATE
2 t) t8 @5 e: n$ F/ a#define X264_VERSION "" // no configure script for msvc4 M6 U$ Z) p$ S, B
#define log2f(x) (logf(x)*1.4426950408889634f)& \, F  J- Y/ d  ]7 b
#endif, C: K" p& m+ m
4 ^0 K' E) {: N. ~' u' X
或 :
9 I& z5 R. a5 \# A& S# c7 y: M#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
' i% V/ P8 Q+ F- N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 19:24 , Processed in 0.016684 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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