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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy). Z% W" N9 o/ K6 _7 I7 ?. F" U2 R
, Z# l* m. s0 [  F8 D
下载地址:' G$ x* i# Y$ {3 i
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar1 B- q8 E: k7 ]2 [- J5 P
- y$ \5 n. w5 _" J. W
        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。
9 B& I6 s2 {8 a. G
3 |5 u% X+ F2 I6 K0 t科普开始5 {( Y9 Y1 H' P4 j
/ R9 b/ X; n& C( Y8 B' n
1、编译问题
9 Q+ t3 ?. r' q由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
9 z2 z9 D5 t/ w  D3 X解决办法:在函数开头统一定义变量
/ C6 m# T6 c2 A8 i, r& _5 C! s/ s. F+ G7 R
e.g
* K3 |3 O& R2 a4 O
$ E/ Z* ]$ ~& W* j$ G+ f' J- a7 ?编译不过
% j4 H# |5 B5 v5 fvoid funA() {                              void funA() {
, O8 a) D, N( |" Y3 U1 ^   int i,j;                                        int i,j,x;9 H! H& Y* `: |3 P* B
   i = 0;            ========>         i = 0;+ F! m7 m+ f% r* r: |
   int x = 0;                                   x = 0;, D) ?+ c2 Z: a7 G1 x6 n
}                                               }
- e, O& b" @7 f& o- ^% O# z; v, n
2、链接问题2 S. @3 e& T, Y  n" d3 T0 q
& V* g; v4 q  o; T- K2 A6 ~7 ?
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用: o4 u3 a9 [: @* q' m# G4 Z
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
$ b( [7 w: Y2 Q( `+ E* G1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用( g. V2 o$ z6 P0 f5 G+ Z
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用
) J4 Q  g5 d  J" }1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用5 a, [1 d, g- H* z. Z  _
1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用  i5 b$ C5 R3 s% p. H$ a
5 E. y# v: D* [/ r4 R# j8 R6 x; s
由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。( U0 G& u. n, |: c
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。( M5 o5 c/ v; W

1 R. D( q! I/ G! f- z- |error LNK2019 unresolved external symbol _log2f8 y8 K, z4 I9 U4 e$ w9 S- b
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :/ l, ?4 b$ J$ S+ ^8 V4 U: Y+ c3 o0 S. M
* ]3 x5 V- m% ~* `4 s
#ifdef _MSC_VER7 z" n, B) V; L6 A) p! \+ b' C
#define inline __inline
, P# C6 |7 [  F/ @7 f# w3 T+ ]#define strcasecmp stricmp: P0 v: A- `- v3 y! ]+ D: b7 }
#define strncasecmp strnicmp6 @1 k7 b5 z7 P1 S  t$ A
#define snprintf _snprintf5 W% o4 E# V  t
#define fseek _fseeki64! ^. ^, v& R/ K0 ^' |( R$ j
#define ftell _ftelli64
: b0 m* U3 c3 f#define isfinite _finite
, B6 n2 }5 G1 F& a) `; [#define strtok_r strtok_s
" c- d5 [, N  j5 ]8 E( Q8 m! C0 e#define _CRT_SECURE_NO_DEPRECATE
; g3 A8 d7 y% Z/ S# h: r#define X264_VERSION "" // no configure script for msvc
5 B8 J0 v, e1 u/ v9 y* I#define log2f(x) (logf(x)*1.4426950408889634f)% ?% _3 |( j1 i& a7 @. g( e
#endif8 Y1 |: ~& X- O9 P" R* w- |
5 F' p0 k3 q  [8 c, x; R
或 :
( w# ]3 A) m$ j9 g! g#define log2f(x)     ((float)log((double)(x)))/(log((double)2))7 F+ M. F& A3 V, C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 07:57 , Processed in 0.017092 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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