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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
" y  p. c0 h& Q3 }- o/ Z5 t$ X
% w, e1 U1 J8 R% ]- J* M. _) ^下载地址:
9 |, i/ ~" G* Y0 |, t" ghttp://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar
  [# L# Y0 j; T' n- V; y4 |9 e# W# {! X
        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。
) ]9 \, l3 t. l: K+ A1 }' f3 T6 }6 `4 q& ?
科普开始; a1 O" q) ~/ s3 X) @3 H/ \
+ Q# G1 o6 g( z4 G! [3 v
1、编译问题
9 {* K3 k5 }) w1 k4 |4 r由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。, e/ ?( J8 M1 h+ {$ G0 m
解决办法:在函数开头统一定义变量
5 x) c* W, C4 ]4 s2 C6 `! d
3 `) j0 F2 @8 Q: Z* @6 Xe.g
, p* F2 N0 B& o+ M2 ^$ M" Y& H4 A
编译不过  u- f( B5 z( M9 E$ n: T+ B$ W. ?
void funA() {                              void funA() {
1 T5 Y' R7 z) g; ~) t: m% {   int i,j;                                        int i,j,x;# d" P1 R7 r9 D5 E1 A' s5 {
   i = 0;            ========>         i = 0;6 s# r) J0 T0 G
   int x = 0;                                   x = 0;  [5 U. j4 B3 D
}                                               }, `/ P7 y3 m, F, \% `; B0 e

1 P0 E& N1 Q$ T( S( p2、链接问题
$ q& Y+ K2 R- F  a+ P! G! k* O1 w/ s3 e. l& Q7 A7 j( w4 H
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用0 G. t, w, ^. w) `9 T6 ?
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用8 g) i+ o( ]% f$ V
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用/ W4 k4 E* L* J
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用( K3 ^; {; l' [! M2 @& X( T" V
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用( ?  e0 f" n7 f; Y0 w1 t2 ]; C0 Y
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用
# W& ]! d( R- a$ O; O; \0 K/ f- {, s
& j! e) j$ O6 l2 _; K9 ]由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。$ {" e; W$ L) c, F4 Q& z+ L
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。: s, B# p0 q/ Z! m4 W2 [; [

8 v9 H' E7 Z8 Z! w7 l) werror LNK2019 unresolved external symbol _log2f
2 |, S7 k3 E2 x0 p5 p另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :
6 K3 m& c7 C- J/ |5 G1 t2 l0 C7 k, W* \
#ifdef _MSC_VER+ U5 R8 d0 G7 F7 [
#define inline __inline
+ j; a5 N9 }6 l#define strcasecmp stricmp) M( J6 x% }6 f' ~
#define strncasecmp strnicmp8 G9 `9 Q' B; k
#define snprintf _snprintf
# w) H# [+ u6 w#define fseek _fseeki641 H1 _6 ?. Z2 m
#define ftell _ftelli64; l& u4 c0 F8 |- }7 L
#define isfinite _finite
+ N+ S4 P9 a) J" r, _#define strtok_r strtok_s
( [8 _0 r+ t4 N6 V' Y#define _CRT_SECURE_NO_DEPRECATE
4 p- |( J" q8 H$ t0 q; k. g( ^. {#define X264_VERSION "" // no configure script for msvc
1 U7 [+ W+ E! f0 s#define log2f(x) (logf(x)*1.4426950408889634f)
+ k$ s4 e$ x! ^) q#endif
) `* c0 V/ C: S1 _
; U4 U7 u+ o$ N( S- ]+ w或 :5 c: D. b5 e  t" O' V1 e
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
. h! a: J7 o* i/ t1 ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:16 , Processed in 0.017563 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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