xvid-core1.1.2编译方法(vc6,vs2005)

来源:互联网 发布:手机点歌软件 编辑:程序博客网 时间:2024/04/30 10:53
对于vc6.0环境下的编译方法,偶就借花献佛了见附件,偶直接把人家给翻译好的东东拿上来。
附件中的xvid-core-1.1.2是偶根据下面的操作,可以在vs2005下面编译的版本。
主要是起到备忘的作用,我主要讲讲在vs2005平台上面编译xvid-core的方法,
浪费了偶两个多小时,心疼ing...
首先,在win平台下面nasm.exe是不可少的,这个codec有太多的asm文件需要编译了。
方便起见偶放到附件里面了。下载它以后,我们需要把它放到vc的bin目录下面。在我的机器上是
D:/Program Files/Microsoft Visual Studio 8/VC/bin
好了,做到这里,第一步算是完成了。
下面就是非常让人苦恼的问题了,我自己感觉这是vs2005的bug。
原本的xvid-core1.1.2是专门为了在vc6下面编译的,所以那些工程文件
都是为vc6准备的,到了vs2005,连导出mak文件都没有了。我们必须从dsp文件开始下手。
进入:
D:/xvidcore-1.1.2/build/win32
我们会看到很多vc6工程文件:
2006-11-01  19:47            40,132 libxvidcore.dsp
2006-11-01  19:47            39,512 libxvidcore_static.dsp
2006-11-01  17:58             4,718 xvid_bench.dsp
2006-11-01  17:14             4,203 xvid_decraw.dsp
2006-11-01  17:46             4,900 xvid_decraw_static.dsp
2005-10-07  23:02             4,138 xvid_encraw.dsp
2006-11-01  17:45             4,666 xvid_encraw_static.dsp
2006-11-01  18:00             2,262 xvidcore.dsw
如果我们双击这个xvidcore.dsw,vs2005会提示你是否转换工程到
vs2005的版本。如果转换了,面临的结果就是铁定编译不过。
经过痛苦的追踪,我找到了编译不过的原因:
(1)dsp工程文件转换到vs2005时候的bug,手工解决
用ultraedit或者任何你喜欢的文本编辑器打开,然后搜索"InputDir"
你会看到如下的内容:
!IF  "$(CFG)" == "libxvidcore - Win32 Release"
# Begin Custom Build - Assembling $(InputPath)
InputDir=../../src/image/x86_asm
IntDir=./Release
InputPath=../../src/image/x86_asm/colorspace_yuyv_mmx.asm
InputName=colorspace_yuyv_mmx
"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
 nasm -f win32 -DPREFIX -I"$(InputDir)"/ -o $(IntDir)/$(InputName).obj $(InputPath)
# End Custom Build
这段就是没有修改之前的内容了,从上面的脚本看来,应该生成如下的编译命令:
nasm -f win32 -DPREFIX -I"../../src/image/x86_asm"/ -o ./Release/colorspace_yuyv_mmx.obj ../../src/image/x86_asm/colorspace_yuyv_mmx.asm
这个编译命令是可以单独编译生成.obj文件的,偶已经测试过。
但是经过转换后vs2005的转换结果是:
nasm -f win32 -DPREFIX -I"../../src/image/x86_asm/"/ -o ./Release/colorspace_yuyv_mmx.obj ../../src/image/x86_asm/colorspace_yuyv_mmx.asm
注意这里只是-I"../../src/image/x86_asm/"/莫名其妙的多了一个"/",nasm就会报告:
nasm: error: no input file specified
type `nasm -h' for help
所以,这个问题解决方法是把上面代码改为:
# Begin Custom Build - Assembling $(InputPath)
InputDir=../../src/image/x86_asm
IntDir=./Release
InputPath=../../src/image/x86_asm/colorspace_yuyv_mmx.asm
InputName=colorspace_yuyv_mmx
"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
 nasm -f win32 -DPREFIX -I$(InputDir) -o $(IntDir)/$(InputName).obj $(InputPath)
# End Custom Build
去掉引号和它后面的那个/即可。
这个时候,你再双击xvidcore.dsw,执行转换,就可以发现.asm文件都可以顺利编译了。
但是在编译.c文件的时候,会出现一大堆警告,警告原因主要是使用了"非安全"的代码
比如scanf和sprintf之类的,编译器会建议你采用scanf_s和sprintf_s之类的安全替代
函数,只要简单忽略这些即可。
(2)修改源文件的定义
但是下面的错误,就让人头疼了:
error C2632: 'int' followed by 'int' is illegal
双击它,打开的文件竟然是crtdefs.h文件,系统的运行库怎么可能会出错?
原因肯定在代码里面。
这里的int followed by int是这句代码引起的:
typedef _W64 int         intptr_t;
这里的intptr_t是不是由于已经被定义了,所以此时编译器解释为:
typedef _W64 int         int ;
这样,就是int followed by int出现的原因了。
所以,再回头查看源代码:
我们在C:/xvidcore-1.1.2/src目录下面有一个#    define intptr_t int32_t
呵呵,原来如此,xvid的作者已经定义了intptr_t了。这个定义和crtdefs.h文件
中的定义相冲突,因此,才导致了这个问题。
ok,简单注释掉即可。
现在重新编译一下,选择rebuild solution,呵呵,everything go on its way.
这些就是我在vc6编译成功的基础上在vs2005上编译该库的一点心得。
希望对大家有用。
原创粉丝点击