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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy), Q! P7 N/ r$ _0 v- y) X
# d) [, b3 B3 P/ ^( n$ Z  {# x  K
下载地址:2 e4 |8 H" F0 l! Y- a
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar# u' }! W* W& t- t, J! S- i( @1 a
& ~" S- H9 n! h( k& K, S
        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。' J; s0 A1 T3 B6 S
1 q! D0 [. q9 s
科普开始. S  v6 n- d$ u9 N+ F4 U
2 u' `/ i3 {7 `
1、编译问题4 V; m! Q$ {' c/ g8 U0 }; b
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。/ y& O5 r! K1 d: k( N0 q9 D
解决办法:在函数开头统一定义变量2 H' j7 V/ B* l7 Z

6 C1 |6 v' e5 Qe.g, F8 X9 q/ e6 h4 F. x
3 k7 ^: H7 H" ^! Z' E, p9 w
编译不过: K! [9 D6 ^: M3 M% K
void funA() {                              void funA() {
* V; _6 U' h+ I   int i,j;                                        int i,j,x;3 y, L. C( e! R* F; Q
   i = 0;            ========>         i = 0;1 J9 A& u& G8 t* H4 l2 P4 \$ E
   int x = 0;                                   x = 0;
5 p, p- q; Y9 [8 j}                                               }* Q  V8 ]8 Y8 n2 x) h3 w$ `2 E8 l

$ T& b9 W5 P/ {% `8 u* T2、链接问题6 q/ G" O' Y1 U5 Q

/ ?/ a6 I7 k# s+ H  U- h3 ~8 Nlibx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用0 q0 K7 L7 @$ M( M# w
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
, Z; y+ I9 w$ k  w0 O$ n, m8 N1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用
7 [! {8 i! {# ~1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用  N* [) F7 P! _+ O# _- e
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用/ b% p6 q7 b, W  O8 P) h
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用/ Q" x/ z; e1 [3 L9 q

( v6 g- H. N: S# t( t5 X; K, J; M由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。+ y( |& z2 I; Y2 Z4 j6 a
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。% y$ ?  j6 c- g

6 T, z  l" X# Z3 {  y* g# j, r: @5 Aerror LNK2019 unresolved external symbol _log2f( R8 u5 M7 P) y, y0 w: m. [& p
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :2 j. V1 U' e3 C" K& X$ n9 t

! U4 v. ^: m6 ?, k! }# f0 Z#ifdef _MSC_VER" I# ]) c4 h  U2 r
#define inline __inline) @- K4 P; l& b( b! Z2 G" @6 B
#define strcasecmp stricmp
! a4 D, @$ e4 T$ P#define strncasecmp strnicmp# t% {! g* V& |2 I, T3 |5 g
#define snprintf _snprintf
, l8 v# ^0 h( D- v8 h% ?$ J7 {2 }2 ]( r#define fseek _fseeki643 [; T6 q# P7 I- [+ U) J% Y
#define ftell _ftelli64
9 c# i3 u- W; p5 A0 H. x#define isfinite _finite
8 S8 ]2 T! k2 W6 s* R#define strtok_r strtok_s
% T% X/ f7 w4 k8 f3 p# H  J" s#define _CRT_SECURE_NO_DEPRECATE
& }$ P* h( @0 X! d4 m/ @4 ~#define X264_VERSION "" // no configure script for msvc
4 O3 T. X7 ?) _3 W! r+ ?% I#define log2f(x) (logf(x)*1.4426950408889634f)
: Z- c- |  Q& M" A, ?#endif
) d# T  B6 W5 [) ^& T# {  q
, g. ~; D) f' Q! D0 ?或 :5 Z$ Q' e  f. P% I6 T
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
. B; f6 q. }: O$ w4 T8 Z+ a1 Y0 ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 21:28 , Processed in 0.016151 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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