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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
: F' n5 }) P2 i. ?* F* n
' |3 C$ a$ F1 y0 G' e1 w下载地址:4 i1 r6 k7 k4 w/ K
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar  w( }: W: e+ O& l% G  {6 {
2 l8 n6 f9 w, z
        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。
& g# H# k0 p' e8 [$ d' R7 c8 l+ ]% X; d/ u0 R
科普开始
- s9 X* d9 q% J/ U2 c$ W; w3 x6 W% b. T- G4 c
1、编译问题# [* i% B4 R2 ?" S! ^" D3 ^$ O
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
& s0 z( A( d/ R( x6 S% `0 ^解决办法:在函数开头统一定义变量
) G1 S' y1 l0 ~: p" N: g5 M6 B+ ~: \1 u2 u' b2 R  T9 U# k3 d* j
e.g" A; o9 v3 l/ v: t1 N5 q# C
0 y; e$ ^! D4 z; s' d1 D' c5 A0 l) ?
编译不过- [* `0 e4 }1 R7 A/ x$ [
void funA() {                              void funA() {
8 ?& n* j0 }5 c5 S   int i,j;                                        int i,j,x;
6 x1 k/ i6 Y" h7 ^   i = 0;            ========>         i = 0;8 r3 [& n" E$ P
   int x = 0;                                   x = 0;
% L2 b1 ?# ~% [$ `}                                               }
" y0 o; Z% I9 z" P# X3 ^7 Q
+ x* H7 z  {1 q* q: {8 w, h2、链接问题. @( k/ H; [8 Z8 E8 P: x7 k. W
0 K. y& Q, q2 M5 r4 {
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用
5 N+ ]6 p- E% f, |3 y; h1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
: E4 e  f# A3 B+ ~# Z8 z1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用5 K& T- B3 t9 B% G  E$ U- Y7 W
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用8 s' i/ N+ H; v! E* v3 F& v
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用
8 d' z. V' l" N, B! l1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用
! f( U: ?( U; E( l! T1 B" K, B6 t- h
5 {* E" K) ^& Y8 K! ^: o( H. q6 l由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。" E: Z3 ]6 p+ S3 R$ F6 Y. O/ x
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
' w9 j, t3 o( w3 {4 Q% e
8 M  J+ G  M( Q) v' f7 Cerror LNK2019 unresolved external symbol _log2f+ \* n' A9 `6 w
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :
' `( D% J5 i9 T
$ Z9 _& S9 t- w( ]/ R1 D1 ?#ifdef _MSC_VER
. {  o8 c5 Z8 S: a& B1 n# S" Y#define inline __inline0 }8 ^4 C% _( M5 L2 @
#define strcasecmp stricmp1 m& U6 g- Y9 ^* l0 O" R0 C5 u7 E
#define strncasecmp strnicmp/ c- |9 \) I, u# F) u6 r
#define snprintf _snprintf
$ v% }9 t3 t4 {. n7 l# ^5 p6 o+ E#define fseek _fseeki64
  V4 ]8 l# t' L$ ?! C  X#define ftell _ftelli64# v4 g& L. e/ A% G3 G  N" ~
#define isfinite _finite9 O' }) @5 `9 X3 o! ^
#define strtok_r strtok_s
- i+ |& ~8 ^( H$ n% R' _4 K#define _CRT_SECURE_NO_DEPRECATE: z: X0 t' i$ z2 C* N; m. y* L
#define X264_VERSION "" // no configure script for msvc# Q( n/ j4 _4 N0 y3 m% V6 w
#define log2f(x) (logf(x)*1.4426950408889634f)
' l. y. u, Y3 _  O' `" V; Q  D: |) a#endif/ H# K* r% n8 o2 w; T: `
/ @5 X  `$ H. I# K0 \; X6 M
或 :
" |, E/ A( @8 e' W#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
& ^2 y. \9 b- i+ L: L/ C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 14:44 , Processed in 0.017899 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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