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

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

[复制链接]
发表于 2011-5-25 21:03:42 | 显示全部楼层 |阅读模式
// [+] 09/25/09 (mm/dd/yy)8 G4 [  s. ~. `; m) O) _, n2 z
% c) o# _3 ~; p/ z5 C& `
下载地址:: o: z: T# E% S+ {
http://ttpublic.googlecode.com/files/x264-snapshot-20090216-2245.rar
3 \9 `$ @' v- W0 g
2 e7 q* z7 _1 J) _        总有人说最新的版本编译不过,搞的群、论坛里到处都是这种求助贴。建议斑竹把这个解决办法放到醒目的位置,以减少噪音。* s9 c1 ?( p6 d
- ]2 l6 z; t! j7 c
科普开始
" E) O& J/ ~  }) W# w3 G1 i# x! D; u
1、编译问题
1 _- w% x% G8 k. S" h2 b4 J由于MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
! Q; Z7 @! E# C" v4 n解决办法:在函数开头统一定义变量
# w' W9 K) p0 E1 K9 Y* s3 t) @2 I- W5 L+ W2 r: u
e.g9 c: C3 B' N* ]+ e* r4 z1 G/ y

9 e6 Z+ `# @% [8 L9 d编译不过' ]) h5 s- ?* i: W) F+ ~0 h# `# H
void funA() {                              void funA() {9 G6 d9 Z1 ~- o* ~; [: m
   int i,j;                                        int i,j,x;9 f% P9 ]% f/ ~( J2 I; a1 K$ Z
   i = 0;            ========>         i = 0;  X: q2 O7 @6 e# y
   int x = 0;                                   x = 0;
" i# _( M( N! q; E5 _}                                               }
. a3 i* ^( \: l2 B4 g: }' _& p
3 Y, P: O' u! n2、链接问题
. K3 s; v1 f3 Z) W- m. @$ p
# ]' T* w9 J9 ]" J. ]libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_init,该符号在函数 _x264_encoder_open_75 中被引用3 `* d. h0 s5 t+ L" V1 C, j) D7 @
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_is_empty,该符号在函数 _x264_encoder_encode 中被引用
$ t9 G, k: |0 s% s/ L1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_get_frames,该符号在函数 _x264_encoder_encode 中被引用
9 l% w: L1 ]/ v6 o1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_put_frame,该符号在函数 _x264_encoder_encode 中被引用8 g& u! a7 N% U! p  t" y! w
1>libx264.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_lookahead_delete,该符号在函数 _x264_encoder_close 中被引用
6 d1 Q: }$ G! u! [$ `9 g5 u6 G; C1>libx264.lib(analyse.obj) : error LNK2019: 无法解析的外部符号 _log2f,该符号在函数 _x264_mb_analyse_load_costs 中被引用% K) K# [+ ^" ~" l8 _

' [$ d& Y) d6 o4 \+ c! B由于最近x264_param中新添了lookahead,而对应Win32工程是没有及时更新。3 R! C4 J  m2 [. G
把encoder/lookahead.c添加到工程里(和encode.c放在一起)即可。
8 Y7 ~( m. @" G5 j
( ]/ g, z0 y1 B$ {: ferror LNK2019 unresolved external symbol _log2f
( e* ~# {5 e  I另外,如果最后出现error LNK2019 unresolved external symbol _log2f,在osdep.h里定义一下log2f(不知道性能如何) :
* A1 y2 d- @8 v
, F4 N: a) y# r+ Q3 k) S0 O1 o#ifdef _MSC_VER2 h8 _: E1 o# v3 s
#define inline __inline
7 Q& F- H' {$ p. s$ U  ^1 h! s#define strcasecmp stricmp
# |( k& \7 c7 {#define strncasecmp strnicmp8 v& K( Z. n8 r& w4 c) B$ L+ ~+ M
#define snprintf _snprintf
3 h! ?. F) ^) x' d#define fseek _fseeki64
' x3 A: X4 Z8 n; Y* a; ]#define ftell _ftelli64$ d+ z# I  b9 M
#define isfinite _finite0 h9 H; m; k& p0 ?7 F$ a
#define strtok_r strtok_s
% C* N5 U- d- v#define _CRT_SECURE_NO_DEPRECATE
( x8 I2 u( [4 C#define X264_VERSION "" // no configure script for msvc
: N0 e1 `  j! d/ r# x#define log2f(x) (logf(x)*1.4426950408889634f)& e& r/ g# l1 K+ j) l
#endif) @( \# X' D/ X

# R5 x# V3 m( o9 j$ d8 H或 :7 X; v& z0 l/ q- @! H* k
#define log2f(x)     ((float)log((double)(x)))/(log((double)2))
; \$ g6 x. ~8 E- i
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:44 , Processed in 0.016577 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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