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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
: K9 T2 j, b0 k; k5 z8 V, q5 e# ?
) e0 y( _4 Z4 K! E# q下载地址:
3 E$ \! X' \% j6 hhttp://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar
7 m# X% h! [& V  a" X7 Z
, h: z# w$ H3 U$ Q! X5 ^  M. U1 b        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。* g4 h, {# o5 S( p! P2 f* g
0 I0 w4 }) [5 ?  w
科普开始
! E! o! r2 t& P
& H9 j. i3 T5 I; V$ e0 ?1 O1、编译问题% O0 T& E/ J' F: V
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。/ N; o$ E$ k! Q* ~) @) R
解决办法:在函数开头统一定义变量
! V$ S, n6 u, h( }$ r7 P
( F5 E: T) D3 {  ce.g  ?' ~) @! u1 _% F8 E7 H1 s

7 a7 w9 P) @5 H1 E: l# c- ]编译不过( {" t- R, ?5 r* p  C% C
void funA() {                              void funA() {9 Y# Y. ^7 b( h
   int i,j;                                        int i,j,x;
3 I7 C6 e# S4 H4 l+ M  h0 \5 j   i = 0;            ========>         i = 0;: c0 \# ?& r* `' [; A# B
   int x = 0;                                   x = 0;
+ `% d: N! ]6 B" t2 g}                                               }
3 F, q9 C. a  ?0 M8 O# G& i: U( r4 j9 }9 ]% X) w
2、链接问题
! K( K- s1 j, |3 o2 P1 h" y$ P2 s% r' t# h4 a, `
libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用
1 Z3 C4 D4 Y* c" t& ]1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用, F$ M6 W. v) {# [1 V
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用
- \; o4 ]1 ?+ {+ F2 O1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用
# M# d; P9 V# H  D+ l1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用
  ^: p, s* @6 d1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用
* t7 p, E, F% K- F: N/ |, c# i- r+ d; k  V8 w6 d
由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。3 o4 S* K7 Y* s+ z, c* V/ W( b
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
6 t8 M, A5 u5 W, n* O& |, I5 i! {& Y- ~+ k
error LNK2019 unresolved external symbol _log2f3 `; o, Y2 L, N& o
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :% {% j4 F8 O) N2 b. g5 N+ ]- r
  [5 D  X. h* S1 H9 b
#ifdef _MSC_VER: D8 N! x( V1 w# {
#define inline __inline) @( s, ~# v1 h8 Z6 J
#define strcasecmp stricmp
; Y5 K- f, N6 Q#define strncasecmp strnicmp3 X1 A* C$ m4 Z3 {& `% u2 |+ c$ k
#define snprintf _snprintf9 H- ?3 h4 A9 A$ @: y
#define fseek _fseeki64
& t7 I' A7 a0 c" N#define ftell _ftelli64) n: R! D9 t5 ?! B& Q9 W
#define isfinite _finite/ k0 S1 r4 j# L; p5 n& r; B
#define strtok_r strtok_s
+ R7 Y' |, `" [6 R#define _CRT_SECURE_NO_DEPRECATE
) m$ @) U# s$ S9 a5 U6 @& B#define X264_VERSION "" // no configure script for msvc0 B+ M: m1 ?. b! G
#define log2f(x) (logf(x)*1.4426950408889634f)& D% }( p" o1 l1 G; l
#endif
: z+ N* n" q. M+ b" h$ F5 R) ^
+ D" T" D0 H3 M; s. s/ R% v! ]! |  ]或 :
. n8 Y/ |# @4 m# \/ Q#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
) r7 n( h3 p1 j  j. f
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 07:41 , Processed in 0.023029 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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