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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
. [9 Q( R, U% R% S2 D8 ]
) t8 M3 `! k3 T  A( p! E+ L! Y8 I下载地址:
: [' s! C* J- \" X5 G; i9 fhttp://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar) z6 S9 H6 N; o* r% h0 B

+ B& s. q% W+ N        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。5 ~+ ]' E5 _% {. Z% W6 @- [6 h2 I( S
- m( A/ N* V' H; C9 P$ B' n' o
科普开始2 V0 j5 ?! V- |& r

" E% Q% \9 Q+ S( v& s& z4 O- Z1、编译问题8 ?- r4 E( P, a/ w- x' e
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。1 s' I% i+ t# ~+ E8 A4 {) E
解决办法:在函数开头统一定义变量
' j2 V6 B+ [# Z* H: i; T/ _" l! ^7 u0 f- e
e.g
# ~: N$ T4 Q" q6 _' Z9 k5 ~; W; Q* c9 h1 b
编译不过2 ?! a% c! Z  Z" `6 e( D& X8 h
void funA() {                              void funA() {
! ~  r2 a+ F, ~0 S   int i,j;                                        int i,j,x;
3 g4 z  q; M( l/ V   i = 0;            ========>         i = 0;! r6 D8 C  a4 O6 ^# P0 v3 v
   int x = 0;                                   x = 0;
6 t5 b! n8 |3 @7 Q}                                               }
8 j* U( _" h; g. d7 w& ^: w$ q1 L: c5 f, u; [$ c. ]
2、链接问题: |) l, h$ ~+ |2 ?! Q+ l- S, d
# M6 K6 ~5 b. f, a; Z1 D8 T7 q
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用* M8 k* f: ~6 ]; _# o( B1 I
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
5 T2 `3 k4 b$ E! l1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用
5 C3 @! s5 G- U- h5 d, R2 q1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用. [: L( s) U7 B3 F5 l
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用6 T9 {5 D  H5 Z& k- l1 T3 n
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用/ b) Z8 X( \# Y" G* N# m- m
; W, m. U4 X; x: W4 s
由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。% i/ F/ B" q. t$ p1 q! p
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
( e* K3 Z/ U: B$ i
' u  }0 L7 e" q! M  jerror LNK2019 unresolved external symbol _log2f! m# x4 q2 c' _- b, G
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :# m; N% [) S8 U( s1 X1 F2 ~. W

9 d$ M4 a5 N/ ?# Y3 g#ifdef _MSC_VER- ?: T2 \2 h, s) ~" T! e
#define inline __inline
, J  O5 I5 d, j6 h4 K% k" v9 Q$ Q#define strcasecmp stricmp
: j2 r, L, g: \* H) d#define strncasecmp strnicmp' Q( ?& m, i/ V
#define snprintf _snprintf
# B4 N& U( @: ~6 U& M" E$ h+ Q! J#define fseek _fseeki64
' ^, J+ @! B, w, h& x#define ftell _ftelli64) d8 K# I. u  c$ ?* {
#define isfinite _finite
! c% `& ?4 M2 J6 `7 p#define strtok_r strtok_s0 J* Y, r7 p# z$ M6 X# ]6 a- O
#define _CRT_SECURE_NO_DEPRECATE* D# W' C; m' [) n
#define X264_VERSION "" // no configure script for msvc
6 H2 S$ C7 k0 f. h$ p* X) C#define log2f(x) (logf(x)*1.4426950408889634f)
+ x0 G5 i8 H% n+ z8 ]! E4 N#endif. d, Z8 a4 a( m, q: }

; D% a3 w$ F  r* f或 :
3 o( s% K5 |+ T3 F! V0 A+ k- B  f#define log2f(x)     ((float)log((double)(x)))/(log((double)2))+ x. o  D0 H+ w/ c% F
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 18:13 , Processed in 0.018125 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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