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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)
3 k' c# F7 T6 P5 H
" p# \0 k) |- |2 q+ Q) H下载地址:
# u! i2 _. t1 ~http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar
- H- s' R; I0 l$ j3 h* R
& c+ q% }; s2 i# R, J        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。* G) B: q0 u8 A% [) G9 N

- b0 [' ^; i" h. C  R科普开始
5 P7 ^" b! g) v9 b0 @$ s+ [" e1 s
9 `0 x4 F5 t" q( B1、编译问题. q, Z* F3 f7 {. q; I
由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
' A6 Z+ f" _. S) l  V( _! I- L! c0 n解决办法:在函数开头统一定义变量
/ H% P# G2 e' a* U2 H8 X# [9 ]0 j, L- ~' q$ L( O
e.g  X" A  F; W( g+ V( G) G
6 K4 l, n5 u+ R* O7 ^2 }2 V' }
编译不过4 h& v8 I  o# q4 ?0 H; q) e
void funA() {                              void funA() {( S! j* u5 ]) a4 [" Y
   int i,j;                                        int i,j,x;
  U0 n* U# s" u* |& W& w5 a' D   i = 0;            ========>         i = 0;
0 l& ?2 l, I2 l! d# C1 k% w0 P   int x = 0;                                   x = 0;) G' Q/ X! \; o) [
}                                               }
/ ^$ k+ ?" j0 K- O& Z4 f$ s6 x
. T: L* ^% q) E5 y- ]2、链接问题
/ T; }" b- s1 c
0 n8 r1 |1 H2 s9 C# j. j$ o% Rlibx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用7 M3 ~2 k& I5 u) }4 g1 R
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
( h: ]3 j9 _) l" W6 O9 ^1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用
; V3 L6 A! q' W9 S1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用0 i( S" b$ i7 `, u1 V( O! ~' F: [' F
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用
2 \. j2 Y2 j! x; O! B1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用
9 B2 z) s/ b( P- Y5 i
0 A! T0 X5 @3 a. U+ s# L由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。+ r% j- O+ q+ y# G+ q( Q! E% A
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。, d7 s- D: ]1 V" G# t3 v# E
5 I+ ?' O2 Q- ]3 T  c
error LNK2019 unresolved external symbol _log2f
$ I" s. J% ]) S8 i& g另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :5 \# J8 H$ s% W6 L$ s' U
; H7 u" F+ @# u) o8 k3 b# t
#ifdef _MSC_VER0 n, w. ^( D8 }; Y
#define inline __inline1 e) E9 n7 w& i+ ~: S9 M) ^/ b" @+ w
#define strcasecmp stricmp
, M: O4 `9 z' e#define strncasecmp strnicmp
! z  p4 d6 J. J) c% b6 Y4 W#define snprintf _snprintf
  u+ H+ N) k5 D1 k9 R#define fseek _fseeki64) l+ v% F: ]8 m: W# H
#define ftell _ftelli64: H! c0 w: `+ r' i: B: W  q0 b- P
#define isfinite _finite3 X# o* B, i5 |; b1 F
#define strtok_r strtok_s
4 t( a, n$ Y# C+ H% F' D#define _CRT_SECURE_NO_DEPRECATE
" X, }' g% [  y$ S; \2 N! \/ u0 v, ~7 {#define X264_VERSION "" // no configure script for msvc
) L# l" d) E3 {0 g0 n1 c  Y: M3 Q#define log2f(x) (logf(x)*1.4426950408889634f)2 {: v% Y( }) {  O$ t( E1 t
#endif( \$ B9 t- f% P
( C# f5 _: }: u1 a
或 :
0 v  g. I5 P- K! s2 e8 |#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
5 ~+ H. A$ W& ?6 W8 N6 @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 12:40 , Processed in 0.015007 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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