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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
" s) p" J+ k) Z" z! r5 }5 q/ `6 p1 V2 G* u
下载地址:
/ H7 D9 H( i6 ^" H; V: w$ ^  T" jhttp://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar+ O5 ]. Z% N1 l, |+ O0 x9 s2 U3 z

$ a. C! {. J6 t- O+ T/ Z5 `" ]        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。
) l2 o9 T7 G+ }! e" z( Z+ l  {8 G/ B3 x; [& ^
科普开始
& v$ Y5 k8 D. _" S9 ]$ q( M$ ~  B
& R9 a2 O- d8 t1 o% ^* c1、编译问题9 ^1 N' s& \3 F: e2 Q
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
8 w0 Y) Z+ a1 `/ c1 @$ O/ t/ ^7 t解决办法:在函数开头统一定义变量. z. m) c; B/ ^- {

  K7 u! W% ~  l0 Y  Q/ d0 e; q8 `* oe.g
7 H3 }  y% D  g1 |; Z! t8 ^  u# ~8 E9 e% {2 ?
编译不过
; [, p' i1 n1 z+ ?  Wvoid funA() {                              void funA() {/ L* b+ M+ f5 N5 P: ^8 S: e
   int i,j;                                        int i,j,x;: |0 k& z5 c$ O$ I
   i = 0;            ========>         i = 0;) ^( l% v& [* c$ F) U; u
   int x = 0;                                   x = 0;
8 G+ C: @; E* p6 D4 V}                                               }
$ j- N' C5 i% E3 X7 v6 i5 y+ p& [( J: Z7 {5 F) R& }
2、链接问题
  T1 j" F- t' _! @5 M6 k
/ P, n, k$ A8 v. blibx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用5 o' e3 E' S  ^/ A
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用' A4 \* U, Q6 E( o+ i3 c
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用
0 q4 A( o% C) C/ y' g1 \/ K5 q1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用
/ N* m' H) P" ~. a+ \7 f1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用
/ J- L# y( q: n! R2 s( K1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用6 m6 }8 j; C* U- G: H! X
# t4 h$ A; g+ f5 U$ f" J. x
由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。! |! l$ i; _2 {: p+ z( ^2 g/ K6 T) V
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
# a+ J; \$ m4 q+ k- ?' f3 W( L; c6 Z- o! K& P0 h
error LNK2019 unresolved external symbol _log2f2 Y& v6 k" Z8 }3 x' ]+ Y
另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :6 c& |# e  l  k

" w, T- x; \( v% k! K8 A#ifdef _MSC_VER
" \+ I5 Q+ _. t/ k! I, ^#define inline __inline, d/ K- Z6 K6 F5 M0 o5 c
#define strcasecmp stricmp' Q& e, r( s+ z6 ], Q# Y2 M5 D2 v
#define strncasecmp strnicmp- {* D0 d7 ~! M. _+ m3 \7 {
#define snprintf _snprintf6 B* Z" c& j1 M  N" N
#define fseek _fseeki64+ A9 h: h7 m4 x8 a5 D  F
#define ftell _ftelli64) D2 J$ v# q& w$ B& B- ~1 p7 F
#define isfinite _finite
- E2 V. P# [' ?9 E2 R#define strtok_r strtok_s
) z2 s$ L0 ^8 ]: r5 }* T#define _CRT_SECURE_NO_DEPRECATE) L3 {6 f; Q- h
#define X264_VERSION "" // no configure script for msvc
  J, ~4 D+ }3 I9 U0 I. U. N#define log2f(x) (logf(x)*1.4426950408889634f)% S! @0 t! |: \+ C% D# x. m5 V
#endif% h4 S7 O& O' ^& K& w$ i

9 `' T# s3 \& W6 b* k3 u4 _  {或 :+ C+ G, ?, T. l# n; x
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))( o" B, Z5 P0 k: E, Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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