您的位置:首页 > 其它

windows平台下vlc编译之六

2010-05-12 10:02 295 查看
转自:/article/4430501.html

windows平台下vlc编译之六:vlc-0.9.8a的编译

首先感谢vlc的qq群*阿来*帮忙解决了一个关键问题。

vlc用Cygwin编译老是会出这样那样的问题,所以编译起来是相当相当的郁闷。vlc-0.9.6版的官方提供的版本会有几个严重的缺陷,在官方网站上面已经郑重道歉了。vlc-0.9.8a是目前发行的最新版,所以对其编译是势在必行的。

废话了这么多,进入正题。简单写一下,如果有不明白的,看看前面几篇日志。

1. 编译环境,目前最新的Cygwin。(《windows平台下vlc编译之五:vlc-0.9.6的编译》提供下载地址)

2. 源码和库:
源码:http://download.videolan.org/pub/videolan/vlc/0.9.8a/vlc-0.9.8a.tar.bz2
库:contrib-20081021-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2
(
在我的公共邮箱提供了下载,具体下载方式为:
1). 登录http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(jeremiah.vlc@gmail.com),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
)

3. 执行

sed -i 's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g' configure.ac

./bootstrap

4. 保存如下脚本为configure-vlc01.sh

PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
--host=i686-pc-mingw32 /
--enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
--enable-avcodec --enable-avformat --enable-swscale /
--enable-faad --enable-flac --enable-theora /
--enable-freetype /
--enable-fribidi /
--enable-live555 --with-live555-tree=/usr/win32/live.com /
--enable-caca --with-caca-config-path=/usr/win32/bin /
--with--config-path=/usr/win32/bin /
--with-dvdnav-config-path=/usr/win32/bin /
--disable-cddax --disable-vcdx --enable-goom /
--enable-twolame --enable-dvdread /
--enable-debug --enable-dca /
--disable-mkv --disable-taglib /
--disable-zvbi /
--enable-mozilla --with-mozilla-sdk-path=/usr/win32/gecko-sdk

5. 执行./configure-vlc01.sh

6. 执行make前改两个文件。(行数可能不对,用搜索功能吧)

libtool第156行:
修改
global_symbol_pipe=""

global_symbol_pipe="sed -n -e 's/^.*[ ]//([ABCDGIRSTW][ABCDGIRSTW]*//)[ ][ ]*//(//)//([_A-Za-z][_A-Za-z0-9]*//)/$///1//2//3 //3/p'"

Makefile.am第695行
修改
cp "$(top_srcdir)/extras/package/win32/vlc.exe.manifest" "$(win32_destdir)/"

# cp "$(top_srcdir)/extras/package/win32/vlc.exe.manifest" "$(win32_destdir)/"

Makefile.am第725行:
cp $(top_srcdir)/projects/mozilla/npvlc.dll.manifest $(win32_des
tdir)/mozilla/

# cp $(top_srcdir)/projects/mozilla/npvlc.dll.manifest $(win32_des
tdir)/mozilla/

Makefile.am第736行
修改
cp $(top_srcdir)/projects/activex/axvlc.dll.manifest $(win32_destdir)/activex/

# cp $(top_srcdir)/projects/activex/axvlc.dll.manifest $(win32_destdir)/activex/

7. 执行make && make package-win32-base。搞定!

windows平台下vlc编译之七:vlc-1.0.0-git的编译

周末在家用git下载了vlc-1.0.0-git版本,编译了一下,出现了一个小错误倒腾了半天,源码里面的一函数定义有问题,修改了下,编译成功。

由于Jeremiah在写这篇日志的时候官方没有发布1.0.0的源代码,git版本是很不稳定的,比如运行了一下发现界面做的就很不好,播放的画面是另外的一个窗口,而不是播放器本身的窗口。

闲言少叙,开始正题。

1. 编译环境,目前最新的Cygwin。(《windows平台下vlc编译之五:vlc-0.9.6的编译》提供下载地址)

2. 源码和库
由于源码官网未提供,git下载速度确实有点不敢恭维。有些朋友的公司还会用代理上网,比如我们公司就这样。git通过代理麻烦的很。所以,Jeremiah把自己下载的源码放到网盘里面了,请需要的直接点击下载。并且,由于不知道git是不是每天更新,所以不能保证用git下载的和Jeremiah编译的是一个版本。
源码:
(
在我的公共邮箱提供了下载,具体下载方式为:
1). 登录http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(jeremiah.vlc@gmail.com),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
)

库:contrib-20081021-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2
(
在我的公共邮箱提供了下载,具体下载方式为:
1). 登录http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(jeremiah.vlc@gmail.com),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
)

Jeremiah提供的源码里面修改了modules/stream_out/raop.c,如果是用git得到的,make的时候可能会遇到错误:

.libs/libstream_out_raop_plugin_la-raop.o: In function `SplitHeader':
/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:550: undefined reference to `
_vlc_strsep'
/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:558: undefined reference to `
_vlc_strsep'
.libs/libstream_out_raop_plugin_la-raop.o: In function `ExecRequest':
/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:593: undefined reference to `
_vlc_strsep'
/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:646: undefined reference to `
_vlc_strsep'
/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:602: undefined reference to `
_vlc_strsep'
Creating library file: .libs/libstream_out_raop_plugin.dll.a
collect2: ld returned 1 exit status
make[5]: *** [libstream_out_raop_plugin.la] Error 1
make[5]: Leaving directory `/home/wangwei1/vlc-1.0.0/modules/stream_out'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/wangwei1/vlc-1.0.0/modules/stream_out'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/wangwei1/vlc-1.0.0/modules/stream_out'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/wangwei1/vlc-1.0.0/modules'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/wangwei1/vlc-1.0.0'
make: *** [all] Error 2

请自己修改modules/stream_out/raop.c,在一堆宏定义下面加入:


char *vlc_strsep( char **ppsz_string, const char *psz_delimiters )


{


char *psz_string = *ppsz_string;


if( !psz_string )


return NULL;




char *p = strpbrk( psz_string, psz_delimiters );


if( !p )


{


*ppsz_string = NULL;


return psz_string;


}


*p++ = '/0';




*ppsz_string = p;


return psz_string;


}

3. 执行

sed -i 's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g' configure.ac

./bootstrap

4. copy脚本configure-vlc01.sh到源码中。脚本在附件(file.rar)里面提供了,与vlc-0.9.6的编译脚本完全相同。

5. 执行./configure-vlc01.sh

6. 执行make前改个文件

libtool第144行:
修改
global_symbol_pipe=""

global_symbol_pipe="sed -n -e 's/^.*[ ]//([ABCDGIRSTW][ABCDGIRSTW]*//)[ ][ ]*//(//)//([_A-Za-z][_A-Za-z0-9]*//)/$///1//2//3 //3/p'"

不想改就直接覆盖附件(file.rar)中提供的这个文件。

7. 执行make && make package-win32-base。搞定!

windows平台下vlc编译之八:vlc-0.9.9[a]的编译
Jeremiah今天偶尔到vlc官网的FTP上面逛了下,发现vlc-0.99的官方代码已经发布了。下载下来编译了下,跟vlc0.9.8a的编译没有任何区别。在这只写一下源码和库。

vlc-0.9.9
源码:]http://download.videolan.org/pub/videolan/vlc/0.9.9/vlc-0.9.9.tar.bz2
库:contrib-20090118-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2

(
在我的公共邮箱提供了下载,具体下载方式为:
1). 登录http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(jeremiah.vlc@gmail.com),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
)

2009.04.18修改:增加了vlc-0.9.9a的源码。
2010.04.15修改:解决了窗口弹出问题。

vlc-0.9.9a与vlc-0.9.9的不同之处是"This update is Mac OS X only",所以,如果是windows编译,可以忽略。在此,Jeremiah还是给出它的源码地址和第三方库地址。
源码:http://download.videolan.org/pub/videolan/vlc/0.9.9a/vlc-0.9.9a.tar.bz2
库:contrib-20090118-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2

剩下的步骤跟《windows平台下vlc编译之六:vlc-0.9.8a的编译》完全一样。

问题:编译完了之后的vlc还是播放画面窗体与主窗体分离,不知道是啥原因,暂时还没有分析出来。期待解决。

解决方法:修改modules/gui/qt4/qt4.cpp的216行,将#if 0改成#if 1,重新编译。(本人严重怀疑这是不是vlc官网的人特意加上的让我们编译源码不能非常好的使用。)


#if 1


add_submodule();


set_capability( "vout window", 50 );


set_callbacks( WindowOpen, WindowClose );


#endif

windows平台下vlc编译之九:vlc-1.0.0-rc*的编译

VLC-1.0.0-rc1版刚刚发布,Jeremiah在第一时间编译了下,没有发现其他的问题,所以,还是大体写一下,表示我对VLC的编译还在持续的关注。
(2009-06-08补充:1.0.0-rc3编译成功,如有需要到vlc官网下载exe安装文件)

rc1源码:ftp://ftp.crans.org/pub/videolan/testing/vlc-1.0.0-rc1/vlc-1.0.0-rc1.tar.bz2
rc3源码:http://ftp.free.org/mirrors/videolan/testing/vlc-1.0.0-rc3/vlc-1.0.0-rc3.tar.bz2
库:contrib-20090118-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2
(
在我的公共邮箱提供了下载,具体下载方式为:
1). 登录http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(jeremiah.vlc@gmail.com),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
)

剩下的步骤跟《windows平台下vlc编译之六:vlc-0.9.8a的编译》完全一样。

在这我就偷懒不写了。

编译完测试了下,发现最近几版出现的播放窗体与控制主窗体分离的问题,已经解决了,但是这一版播放的原始大小会有点问题。怎么说呢,VLC再往好的方向发展,期待1.0.0的正式版的发布。其他的像libvlc.dll的调用,Activex的注册等问题,Jeremiah也会在这两天做测试,如果没问题,就不写了。

官方提供的安装版地址:http://videolan.cdn.cacheboy.net/testing/vlc-1.0.0-rc1/win32/vlc-1.0.0-rc1-win32.exe
绿色版地址:http://download.videolan.org/pub/testing/vlc-1.0.0-rc1/win32/vlc-1.0.0-rc1-win32.zip

windows平台下vlc编译之十:vlc-1.0.0的编译

VLC-1.0.0正式版已经发布。Jeremiah抽空编译测试了一下,发现没啥太大问题,比较好用,也更加人性化,增加了buffer的显示和历史输入的提示。在这Jeremiah想把VLC-1.0.0的编译过程写详细一些,省得大家再往前翻看以前的博客了。

2009-07-30更新:vlc-1.0.1编译,与vlc-1.0.0编译相同,提供vlc-1.0.1源码下载地址。

2010-04-15更新:vista或win7下面使用cygwin可能出现fork不出来的现象,解决方法见第8步。感谢vlc研究2群hali的提醒和帮助。

1. Cygwin的安装
Jeremiah继续使用Cygwin-new(20081208)版。最新的Cygwin应该也问题不大。Cygwin-new(20081208)在我的公共邮箱提供了下载,具体下载方式为:
1). 登录http://mail.qq.com
2). 用户名:jeremiah_vlc
3). 密码:发邮件给我(jeremiah.vlc@gmail.com),我会告知。
4). 在“我的文件夹”的“Jeremiah_VLC相关资源”有所有资料的超大附件连接。
安装过程中选择包为

Archive
unzip
zip
Devel
autoconf
automake
binutils
cvs
gcc
gcc-core
gcc-g++
gcc-mingw
gcc-mingw-core
gcc-mingw-g++
gdb
gettext
gettext-devel
git
libiconv
libgcrypt-devel
libtool
make
mingw-runtime
nasm
patchutils
pkg-config
subversion
Editor
vim
Libs
expat
libgcrypt
Web
curl
wget

2. 源码及库
vlc-1.0.0源码:http://download.videolan.org/pub/videolan/vlc/1.0.0/vlc-1.0.0.tar.bz2
vlc-1.0.1源码:http://download.videolan.org/pub/videolan/vlc/1.0.1/vlc-1.0.1.tar.bz2
库:http://download.videolan.org/pub/videolan/vlc/1.0.0/win32/contrib-1.0.0.tar.bz2
解压源码到~(/home/yourname)下,解压库到/下。这里的解压都可以直接用winrar解压,不过要选对目录哟,源码是解压在X:/cygwin/home/yourname下面,库是解压到X:/cygwin/下面。

3. 一点点清理工作
删除/usr/win32/bin下面的moc,rcc,uic这三个文件,注意,保留moc.exe,rcc.exe,uic.exe。

4. bootstrap
cd到vlc-1.0.0中执行

./bootstrap

成功后会显示

Successfully bootstrapped

5. configure
保存以下脚本为myvlc.sh

PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
--host=i686-pc-mingw32 /
--enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
--enable-avcodec --enable-avformat --enable-swscale /
--enable-faad --enable-flac --enable-theora /
--enable-freetype /
--enable-fribidi /
--enable-live555 --with-live555-tree=/usr/win32/live.com /
--enable-caca --with-caca-config-path=/usr/win32/bin /
--with--config-path=/usr/win32/bin /
--with-dvdnav-config-path=/usr/win32/bin /
--disable-cddax --disable-vcdx --enable-goom /
--enable-twolame --enable-dvdread /
--enable-debug --enable-dca /
--disable-mkv --disable-taglib /
--disable-zvbi /
--enable-mozilla --with-mozilla-sdk-path=/usr/win32/gecko-sdk

执行

./myvlc.sh

成功后会显示

libvlc configuration
--------------------
version : 1.0.0
system : mingw32
architecture : i686 mmx sse sse2
build flavour : debug devel
vlc aliases : cvlc rvlc svlc qvlc
plugins/bindings : activex mozilla

You can tune the compiler flags in vlc-config.
To build vlc and its plugins, type `./compile' or `make'.

6. 修改工作
(1) 修改libtool第144行。

修改
global_symbol_pipe=""

global_symbol_pipe="sed -n -e 's/^.*[ ]//([ABCDGIRSTW][ABCDGIRSTW]*//)[ ][ ]*//(//)//([_A-Za-z][_A-Za-z0-9]*//)/$///1//2//3 //3/p'"

(2) 注释掉Makefile.am第700,730,741行,就是行首加入#。

# cp "$(top_srcdir)/extras/package/win32/vlc.exe.manifest" "$(win3
2_destdir)/"

# cp $(top_srcdir)/projects/mozilla/npvlc.dll.manifest $(win32_des
tdir)/mozilla/

# cp $(top_srcdir)/projects/activex/axvlc.dll.manifest $(win32_des
tdir)/activex/

(3) 修改share/Makefile.am第1行,share/Makefile第639行,share/Makefile.in第639行。

修改
MOSTLYCLEANFILES = $(nobase_vlcdata_DATA)

MOSTLYCLEANFILES = skins2/default.vlt

注意行数可能不对,请对照着改。
解释下这些错误的修改。
第一个错误主要是一个正则表达式,libtool的问题。
第二个错误因为在执行make package-win32-base的时候,会提示找不到某些manifest文件,所以注释掉,让它在打包的时候不去cp这些manifest。
第三个错误是vlc-1.0.0特有的。主要是执行make clean后再次make会出现No rule to make target `skins2/fonts/FreeSans.ttf'的错误。主要是clean的时候把FreeSans.ttf等文件给删除了,这样的修改防止了错误删除。

7. make
执行

make

应该不会报错,成功后,执行

make package-win32-base

就此搞定!

8. vista或win7有可能出现fork不出来的错误,如下:

8928 [main] perl 4540 C:/cygwin/bin/perl.exe: *** fatal error - unable to remap C:/cygwin/li
b/perl5/5.10/i686-cygwin/auto/File/Glob/Glob.dll to same address as parent(0x910000) != 0x9F000
0
8 [main] perl 4476 fork: child 4540 - died waiting for dll loading, errno 11

参考官网的解决方法:

It might fail with some unable to remap error <some_dll_file_name>. It seems you need to rebase all Cygwin DLLs: close all your cygwin applications and launch 'ash' from basic windows command prompt (Start -> Run -> cmd), from there run rebaseall (so start e.g. C:/cygwin/bin/ash.exe and type there text below).

/bin/rebaseall -v

也就是在cmd下面运行

X:/cygwin/bin/ash.exe

然后在里面执行

/bin/rebaseall -v

将cygwin所有使用的dll重新rebase一遍,就能解决问题。
windows平台下vlc编译之十一:vlc-1.0.2的编译

很久没有更新博客了,最近Jeremiah确实有些忙,而且,也没有再对VLC进行深入研究。现在把最新的VLC-1.0.2版本的编译说一下。与VLC-1.0.0及VLC-1.0.1的差不多。在此从略写。

请主要参考《windows平台下vlc编译之十:vlc-1.0.0的编译》

2009.11.04更新:vlc-1.0.3编译。与vlc-1.0.2相同,只添加源码地址。
2009.12.16更新:vlc-1.0.4源码发布,但是根据官网上的信息,vlc-1.0.4只是对基于X11的操作系统进行了Bug修复。所以Windows的和Mac就没有进行新的修复。在此只提供源码。(This release is targetted at fixing bugs on the x11 platforms, fixing bugs especially for KDE, cairo-dock, XCB, v4l and FreeBSD compatibility. Binaries for Windows and Mac OS are not yet on the pipe.)
2010.02.05更新:vlc-1.0.5编译。与vlc-1.0.2相同,只添加源码地址。
2010.04.22更新:vlc-1.0.6编译。与vlc-1.0.2基本相同,增加一个x264.c的修改,见最后。添加源码地址。

具体每版更新信息请参考:http://www.videolan.org/developers/vlc-branch/NEWS

1. 源码及库
vlc-1.0.2源码:http://download.videolan.org/pub/videolan/vlc/1.0.2/vlc-1.0.2.tar.bz2
vlc-1.0.3源码:http://download.videolan.org/pub/videolan/vlc/1.0.3/vlc-1.0.3.tar.bz2
vlc-1.0.4源码:http://download.videolan.org/pub/videolan/vlc/1.0.4/vlc-1.0.4.tar.bz2
vlc-1.0.5源码:http://download.videolan.org/pub/videolan/vlc/1.0.5/vlc-1.0.5.tar.bz2
vlc-1.0.6源码:http://download.videolan.org/pub/videolan/vlc/1.0.6/vlc-1.0.6.tar.bz2

库:http://download.videolan.org/pub/videolan/vlc/1.0.2/contribs-1.0.2-gcc-4.2.1-sjlj-runtime-3.15.2-only.tar.bz2

2. configure脚本

PATH=/usr/win32/bin:$PATH /
PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig /
CPPFLAGS="-I/usr/win32/include -I/usr/win32/include/ebml" /
LDFLAGS=-L/usr/win32/lib /
CC="gcc -mno-cygwin" CXX="g++ -mno-cygwin" /
./configure /
--host=i686-pc-mingw32 /
--enable-nls --enable-sdl --with-sdl-config-path=/usr/win32/bin /
--enable-avcodec --enable-avformat --enable-swscale /
--enable-faad --enable-flac --enable-theora /
--enable-freetype /
--enable-fribidi /
--disable-fluidsynth /
--enable-live555 --with-live555-tree=/usr/win32/live.com /
--enable-caca --with-caca-config-path=/usr/win32/bin /
--with-dvdnav-config-path=/usr/win32/bin /
--disable-cddax --disable-vcdx --enable-goom /
--enable-twolame --enable-dvdread /
--enable-debug --enable-dca /
--disable-mkv --disable-taglib /
--disable-zvbi /
--enable-mozilla --with-mozilla-sdk-path=/usr/win32/gecko-sdk

本次新的configure脚本主要删除了无效的配置,及加入了--disable-fluidsynth,否则编译不过。

3. 修改错误
《windows平台下vlc编译之十:vlc-1.0.0的编译》的第6步的错误(1),(2)的错误还是要修改,(3)可以不用了。但是要修改以下错误。
修改MakeFile的1970行:

echo "Error: please remove $(win32_debugdir), it is in the way"; /
false /

echo "Error: please remove $(win32_debugdir), it is in the way"; /
rm -rf $(win32_debugdir) /

解释下:这个错误主要是由于最后执行make package-win32-base后会产生一个symbols-1.0.2文件夹,而这个文件夹在下次执行make package-win32-base的时候提示存在,然后会报错,就是上面的false,将其改为删除此文件夹,不报错继续。

2010-04-22更新:vlc-1.0.6错误修改
由于官方使用了较新的x264的库,而没有给出相应的contrib,1.0.2的contrib中x264有些过时,没有x264_encoder_delayed_frames函数。vlc-1.0.6还好只是一句打印信息用到了此函数,故注释之。
注释掉vlc-1.0.6的modules/codec/x264.c的1643行:
// msg_Dbg( p_enc, "framecount still in libx264 buffer: %d", x264_encoder_delayed_frames( p_sys->h ) );

其他就没什么问题了,编译过VLC好几遍的对修改此问题都是轻车熟路了。没有编译过VLC的请下载视频观看。下载方式请看以前的博客。
windows平台下vlc编译之十二:用GDB调试vlc
本着开源的精神,本着能让大家更好的学习vlc,使用vlc,今天Jeremiah写一篇重量级的博客,用GDB调试vlc。

很多人尝试过用GDB调试vlc,但都失败了,主要是官方博客给出的调试方法不好用,只能在winvlc.c文件中调试,不能调试其他文件。Jeremiah也是经过了很久的研究,终于在身边一位高手的帮助下,实现了对vlc的调试。在此对身边这个高手表示感谢。

调试前提:
1) 对编译vlc有所了解,最好是编译成功过。由于用GDB调试vlc需要重新编译vlc,所以必须对编译vlc比较熟悉。本篇以vlc-1.0.5为例。如不清楚如何编译vlc的请参考《windows平台下vlc编译之十一:vlc-1.0.2的编译》及Jeremiah自己录制的编译vlc视频。
2) 对GDB有所了解,至少应该知道怎么用。如果不知道,去Google吧,一堆堆的资料。

闲言少叙,进入正题。

1. 执行./bootstrap之前,修改vlc-1.0.5的Makefile.am和Makefile.in文件,去掉以下内容:(直接删除掉)

# Rebase all those DLLs to speed up loading (need cygwin rebase)
if rebase -b 0x42 /dev/null >/dev/null 2>&1; then /
find $(win32_destdir) -type f -name '*.dll' -print | rebase -b 0x70000000 -T -; /
fi

2. 修改myvlc.sh的CC和CXX变量,加入-g。

CC="gcc -mno-cygwin -g" CXX="g++ -mno-cygwin -g"

3. 执行脚本,修改错误,执行make,这些都请参考以前博客。

4. make成功后不要执行make package-win32-base。而是执行以下命令。

make package-win32-base-debug

5. 现在就可以调试了。

cd vlc-1.0.5
gdb vlc

显示如下:



6. 设置断点。
给vlc设置断点其实让Jeremiah头晕了很长时间,但最后终于搞定了。先打印下看看。输入l。



设置断点可以用b function_name的形式,但vlc里面重名函数太多,所以此方法不太好用。



采用另外的方式,b fine_name:line_number的形式,vlc里面重名的文件名是很少的,所以这样的方法可以很有效的设置断点。一开始设置会提示找不到,输入y让其记录就行了。此处举例设置avcodec.c的211行,OpenDecoder函数,即调试plugins/libavcodec_plugin.dll的代码。



7. 执行程序,输入视频路径地址。

run d:/video/01.avi
会执行到libvlc_new之后停住。



按c继续执行后会在avcodec.c的OpenDecoder函数停住。



通过这样的方式就可以进行调试了,比如用s或n进行单步调试。

祝各位清明节快乐。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: