win7下使用cygwin编译VLC
Posted 旷野轻尘一个人 软件开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win7下使用cygwin编译VLC相关的知识,希望对你有一定的参考价值。
win7下使用cygwin编译VLC
http://kathy.blog.51cto.com/1168050/295460
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://kathy.blog.51cto.com/1168050/295460
前几天使用MinGW+msys编译,错误百出
经过几天调,改还是没有成功,不是x264版本落后就是CACA版本落后
我猜想是msys的lib没有及时更新导致的,
在各位的建议下使用cygwin编译,由于本人么有看无言的视频 导致一些错误,另外一个由于是windows7系统也出现了一些 别人没有遇到的错误
总结如下:
首先关于Cygwin 安装以及卸载:
cygwin安装使用了比较简便的方法是无言博客的已经下载好的包然后使用本地安装:
注意1:由于本人不仔细的原因在安装的时候选择了default选项,导致第一次bootstrap错误:
$ ./bootstrap && dos2unix ./configure-vlc01.sh && ./con
+ ACLOCAL_ARGS=‘-I m4 ‘
+ test -d extras/contrib/bin
++ uname -s
+ test .CYGWIN_NT-6.1 = .Darwin
+ pkg-config --version
+ PKGCONFIG=no
+ export AUTOPOINT
+ test ‘‘
+ AUTOPOINT=autopoint
+ autopoint --dry-run --force
+ AUTOPOINT=true
+ echo
+ set +x
generating modules/**/Makefile.am
.......................................................
+ echo
+ echo
+ cp -f INSTALL INSTALL.git
+ autoreconf --install --force --verbose -I m4
./bootstrap: line 110: autoreconf: command not found
+ ACLOCAL_ARGS=‘-I m4 ‘
+ test -d extras/contrib/bin
++ uname -s
+ test .CYGWIN_NT-6.1 = .Darwin
+ pkg-config --version
+ PKGCONFIG=no
+ export AUTOPOINT
+ test ‘‘
+ AUTOPOINT=autopoint
+ autopoint --dry-run --force
+ AUTOPOINT=true
+ echo
+ set +x
generating modules/**/Makefile.am
.......................................................
+ echo
+ echo
+ cp -f INSTALL INSTALL.git
+ autoreconf --install --force --verbose -I m4
./bootstrap: line 110: autoreconf: command not found
于是重装Cygwin选择keep 按照无言博客的pic选项选择;
结果第二次bootstrap出现了折磨我一天的一个错误:
+ autoreconf --install --force --verbose -I m4
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
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
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
然后是一大堆perl 没有fork成功的错误
ctrl+C 停止运行。找错尝试了以下几种方法:
1:卸载重装--这个过程也被折磨了:
卸载过程如下:
--千万不要用setup的install卸载 否则 会产生不能不能卸载的一个ID 我深受次苦
具体步骤如下:
1.删除安装用的临时文件夹(在cygwin里输入命令)(如果你没设可以跳过这步,可以去c盘看看有没有什么文件夹是在安装了cygwin之后产生的,一般那就是了)
$ rm -f /cygdrive/c/你的临时文件夹
2.停止cron service(没开启此服务的可以跳过,我的默认就没开启)
$ cygrunsrv --stop cron
$ cygrunsrv --remove cron
3.停止并删除inetd服务(我的默认也没开启)
$ net stop inetd
$/usr/sbin/inetd --remove-as-service
4.删除安装文件夹,默认是c:\cygwin
5.删除桌面上的icon,和开始菜单里的启动文件夹
6.删除注册表里的相关项
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions
HKEY_CURRENT_USER\Software\Cygnus Solutions
7.删除环境变量(PATH, CYGWIN)
环境变量PATH里的c:\cygwin\bin; 还有名叫CYGWIN的变量
-------------------------
如果你在再次安装 第一次运行之后没有出现home 请将环境变量HOME删除
我卸载只用了 4 5 6 7 好OK
安装的时候我选择全部安装 呵呵。。。。省事的方法 浪费空间
言归正传::::
为了解决fork perl5这个错误我费尽心机:
1.关闭杀毒软件--------问题依旧
2右键 管理员运行Cygwin--问题依然存在
3C盘空间不够(剩下2.7G)-Cygwin安装换到F盘(21G)---问题依然存在;;
再次Google 找到如下解决办法。顺利解决:
1. shutdown all Cygwin processes and services
2. start ash (do not use bash or rxvt)
3. execute /bin/rebaseall (in the ash window)
2. start ash (do not use bash or rxvt)
3. execute /bin/rebaseall (in the ash window)
即:
1 关掉cygwin窗口
2运行-cmd 进去你安装Cygwin的路径下 执行/bin/ash
3然后$ /bin/rebaseall
终于解决fork问题:
下边说一下整体安装编译过程:
1.安装cygwin 注意:不要default 严格按照无言给出的pic选项选择
懒的话就inshtall all
2.按照完成后运行一次 初次运行会创建../home/usrname/文件夹
3下载源码以及第三方库 这里省事了 我没用去匹配直接用了
高人提示的去下载:
与vlc-0.9.9a版本匹配的第三方库——contrib-20090329-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2
将vlc-0.9.9a.tar.bz2和contrib-20090329-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2 w32api-3.11-1.tar.bz2和qt4-4.4.1-win32-bin.tar.bz2。拷贝到/home/username/下面(username为登陆的用户目录),
运行以下命令解压:
tar xjvf contrib-20090329-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2 -C /
tar xjvf vlc-0.9.9a.tar.bz2
tar xjvf vlc-0.9.9a.tar.bz2
tar xjvf w32api-3.11-1.tar.bz2 -C /
tar xjvf qt4-4.4.1-win32-bin.tar.bz2
必须做一点点清理工作:
rm -rf /usr/win32/bin/moc
rm -rf /usr/win32/bin/rcc
rm -rf /usr/win32/bin/uic
rm -rf /usr/win32/bin/rcc
rm -rf /usr/win32/bin/uic
这里注意:如果手动删除 只删除moc rcc uic文件 保留其exe
4 ./bootstrap
执行以下
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-live555 --with-live555-tree=/usr/win32/live.com \
--enable-caca --with-caca-config-path=/usr/win32/bin \
--with-xml2-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
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-live555 --with-live555-tree=/usr/win32/live.com \
--enable-caca --with-caca-config-path=/usr/win32/bin \
--with-xml2-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
保存为configure-vlc01.sh
然后将Makefile.am第694行
修改
cp "$(top_srcdir)/extras/package/win32/vlc.exe.manifest" "$(win32_destdir)/"
为
# cp "$(top_srcdir)/extras/package/win32/vlc.exe.manifest" "$(win32_destdir)/"
Makefile.am第735行
修改
cp $(top_srcdir)/projects/activex/axvlc.dll.manifest $(win32_destdir)/activex/
为
为
# cp $(top_srcdir)/projects/activex/axvlc.dll.manifest $(win32_destdir)/activex/
然后make 好
最后执行 make package-win32-base
搞定!
记以下我编译过程出现的问题和解决办法:
1错误一
make[5]: Entering directory `/home/kathy/vlc-0.9.9a/modules/gui/qt4‘
/usr/win32/bin/moc -DHAVE_CONFIG_H -I../../../include -I../../../include -I/usr/win32/include -
I/usr/win32/include/ebml -DSYS_MINGW32 -I../../.. `top_builddir="../../.." ../../../vlc-config
--cppflags plugin qt4` -o main_interface.moc.cpp main_interface.hpp
/usr/win32/bin/moc: /usr/win32/bin/moc: cannot execute binary file
make[5]: *** [main_interface.moc.cpp] Error 126
make[5]: Leaving directory `/home/kathy/vlc-0.9.9a/modules/gui/qt4‘
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/kathy/vlc-0.9.9a/modules/gui‘
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/kathy/vlc-0.9.9a/modules/gui‘
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/kathy/vlc-0.9.9a/modules‘
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/kathy/vlc-0.9.9a‘
make: *** [all] Error 2
/usr/win32/bin/moc -DHAVE_CONFIG_H -I../../../include -I../../../include -I/usr/win32/include -
I/usr/win32/include/ebml -DSYS_MINGW32 -I../../.. `top_builddir="../../.." ../../../vlc-config
--cppflags plugin qt4` -o main_interface.moc.cpp main_interface.hpp
/usr/win32/bin/moc: /usr/win32/bin/moc: cannot execute binary file
make[5]: *** [main_interface.moc.cpp] Error 126
make[5]: Leaving directory `/home/kathy/vlc-0.9.9a/modules/gui/qt4‘
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/home/kathy/vlc-0.9.9a/modules/gui‘
make[3]: *** [all] Error 2
make[3]: Leaving directory `/home/kathy/vlc-0.9.9a/modules/gui‘
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/kathy/vlc-0.9.9a/modules‘
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/kathy/vlc-0.9.9a‘
make: *** [all] Error 2
可能出现的原因:
1 没用下载w32api-3.11-1.tar.bz2和qt4-4.4.1-win32-bini.tar.bz2
2下载了也解压了 但是没有删除moc rcc uic等三个文件
错误二:
出现诸多的
/usr/win32/lib/libzvbi.a(packet.o):packet.c:(.text+0x6dc0): undefined reference to `__imp__pthread_mutex_lock‘
/usr/win32/lib/libzvbi.a(packet.o):packet.c:(.text+0x6dd3): undefined reference to `__imp__pthread_mutex_unlock‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x9c): undefined reference to `__imp__pthread_mutex_lock‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x10a): undefined reference to `__imp__pthread_mutex_unlock‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x171): undefined reference to `__imp__pthread_mutex_destroy‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x54b): undefined reference to `__imp__pthread_mutex_init‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0xd58): undefined reference to `__imp__pthread_mutex_unlock‘
/usr/win32/lib/libzvbi.a(packet.o):packet.c:(.text+0x6dd3): undefined reference to `__imp__pthread_mutex_unlock‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x9c): undefined reference to `__imp__pthread_mutex_lock‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x10a): undefined reference to `__imp__pthread_mutex_unlock‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x171): undefined reference to `__imp__pthread_mutex_destroy‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0x54b): undefined reference to `__imp__pthread_mutex_init‘
/usr/win32/lib/libzvbi.a(caption.o):caption.c:(.text+0xd58): undefined reference to `__imp__pthread_mutex_unlock‘
没有定义
请在configure-vlc10.sh里面添加
--disable-zvbi
遇到的问题N多呵呵 先这些吧
很感谢
和
Jeremiah:http://jeremiah.blog.51cto.com/
以上是关于win7下使用cygwin编译VLC的主要内容,如果未能解决你的问题,请参考以下文章
在win7上用cygwin编译Geant4自带的example提示 error C3861: “lrint”: 找不到标识符