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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
5 Y& @) c# V1 N; n' i, _
  w  _- ?6 A! j: L# }) R下载地址:0 G; R& a9 _7 `1 D: G+ x; U
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar+ ?  q& Z; i/ V) J5 s
# u" j- Y* J4 d1 a
        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。
7 Q: r. F" m5 @1 T4 x7 j( t) L. p( |% E! D8 }' U  i
科普开始
+ A) j6 P, e* V; e3 u% T. x5 Y) J5 F2 G1 y( l: Y; \1 }
1、编译问题! q. w! K  t# @# ]
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。: R% k( E( k6 Y8 V
解决办法:在函数开头统一定义变量
/ W+ q7 c. m, D! G3 p0 Z" `; u8 t0 w  `9 \5 T3 e
e.g7 B! ~  ]4 {$ P. P' L8 _

; q6 W' U& N8 j9 U编译不过2 D# Q; u$ z4 e$ z: K5 u5 o2 `
void funA() {                              void funA() {
! k" g, l; y# R5 I# I   int i,j;                                        int i,j,x;( m5 B2 M/ q: Z" t4 I9 T
   i = 0;            ========>         i = 0;5 r9 h0 h" @$ F8 i) W  a
   int x = 0;                                   x = 0;. H2 N& n' ]1 f8 y& f. ~
}                                               }
2 \7 k! J* K& {6 e
) P; a4 s. i# }2 r; g6 y2、链接问题
0 S+ r1 z2 B$ M8 u4 ?1 q: ]5 t  |
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用  `1 H, f$ j- v% z5 Q% c
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
. d( ?2 B' z9 r7 t1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用! b% f& @, [+ Q# A5 ]
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用
0 T5 L0 p* n$ H$ r$ T( A4 a2 K% J1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用5 j9 W. @2 Y$ g  }5 d& L) Y
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用) K1 N: r/ _. F

, a2 \( r7 `) P& f% E: ?+ e由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。! T7 C: G, i9 W' m
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
* m* ?0 y7 x4 f& d+ @5 f2 [" T
! `7 O2 z" V) V3 S! r0 ~5 M% Aerror LNK2019 unresolved external symbol _log2f
+ n$ B2 j( m+ r8 t另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :  m) A/ H/ b  d  E! l# x
0 m9 p4 N/ t5 P0 J( k* k8 _' ^3 r2 Y
#ifdef _MSC_VER/ |. |! [7 f& K  Y- ^+ R2 g5 i) {
#define inline __inline
+ c8 J  b4 R. u- r) m- S#define strcasecmp stricmp" M6 r9 f4 o6 ?5 C) J0 L/ I6 C
#define strncasecmp strnicmp* i! |% o# I( t5 ?5 e5 S5 b
#define snprintf _snprintf
9 `4 P8 U; q' u#define fseek _fseeki64$ R" Z% I( o6 g2 @. `/ x2 R
#define ftell _ftelli649 \- D8 B( }8 i# l1 X$ }
#define isfinite _finite" C; R+ ]' H% L: ~+ T
#define strtok_r strtok_s7 ]8 @9 r0 ^1 o. K. H9 z. n! j" P) @
#define _CRT_SECURE_NO_DEPRECATE+ V$ l' K* A% M% I* M' `
#define X264_VERSION "" // no configure script for msvc: T' S4 V+ E( Z9 @( j% B
#define log2f(x) (logf(x)*1.4426950408889634f)
" m$ F% w: F2 x) q/ i& N#endif& L1 M" l# [2 Q8 e( B5 E) ~! |
* f( U7 H' g% L" r( q
或 :" n) _+ J8 R- t: q
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))7 f. F/ l, b( h- b" S# ^& b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 07:57 , Processed in 0.016295 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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