visual studio 2005下xvid的编译

xvid-core-1.1.3在vs2005下面编译。
1.
首先,在win平台下面nasm.exe是不可少的,这个codec有太多的asm文件需要编译了。
使用了0.98.35的版本(高于此版本的没有成功)。下载它以后,我们需要把它放到系统目录system32下(直接在项目中添加executable path也可以)。在我的机器上是E:/WINDOWS/system32
2.
原本的xvid-core1.1.2是专门为了在vc6下面编译的,所以那些工程文件
都是为vc6准备的,到了vs2005,直接转换后编译无法通过。
我们会看到在xvid的build目录下的win32有很多vc6工程文件:
libxvidcore.dsp
libxvidcore_static.dsp
xvid_bench.dsp
xvid_decraw.dsp
xvid_decraw_static.dsp
xvid_encraw.dsp
xvid_encraw_static.dsp
xvidcore.dsw
如果我们双击这个xvidcore.dsw,vs2005会提示你是否转换工程到vs2005的版本。如果转换了,面临的结果就是编译不过。
编译不过的原因:
(1)dsp工程文件转换到vs2005时候的bug,手工解决用文本编辑器打开libxvidcore.dsw,然后搜索"InputDir"
看到如下的内容:!IF  "$(CFG)" == "libxvidcore - Win32 Release"

# Begin Custom Build - Assembling $(InputPath)
InputDir=../../src/image/x86_asm
IntDir=./Release
InputPath=../../src/image/x86_asm/colorspace_rgb_mmx.asm
InputName=colorspace_rgb_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
经过转换后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
问题解决方法是把上面代码改为:
!IF  "$(CFG)" == "libxvidcore - Win32 Release"

# Begin Custom Build - Assembling $(InputPath)
InputDir=../../src/image/x86_asm
IntDir=./Release
InputPath=../../src/image/x86_asm/colorspace_rgb_mmx.asm
InputName=colorspace_rgb_mmx

"$(IntDir)/$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
  nasm -f win32 -DPREFIX -I$(InputDir) -o $(IntDir)/$(InputName).obj $(InputPath)
# End Custom Build
去掉引号和它后面的那个/即可。
同样../../src/image/x86_asm/colorspace_yuv_mmx.asm, ../../src/image/x86_asm/colorspace_yuyv_mmx.asm以及这三个文件的debug版本都需要同样的修改
双击xvidcore.dsw,执行转换,就可以发现.asm文件都可以顺利编译了。
另外的解决方案是不修改dsw文件直接转换成2005工程,在上述三个文件上点右键修改属性为nasm -f win32 -DPREFIX -I$(InputDir) -o $(IntDir)/$(InputName).obj $(InputPath)。

3.
接下来编译出现错误:
error C2632: 'int' followed by 'int' is illegal
双击它,打开的文件是crtdefs.h文件,这里的int followed by int是这句代码引起的:
typedef _W64 int         intptr_t;
这里的intptr_t由于已经在src/portab.h(77)中:
#if defined(ARCH_IS_32BIT)
#    define CACHE_LINE 64
#    define ptr_t uint32_t
#    define intptr_t int32_t //*****
#    if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
#        include <stdarg.h>
#    else
#        define uintptr_t uint32_t
#    endif
#elif defined(ARCH_IS_64BIT)
intptr_t被定义了,xvid为了移植方便所以定义了这个宏,此时编译器解释为:
typedef _W64 int  int32_t ;
这样,就是int followed by int出现的原因了。
简单注释掉#define intptr_t int32_t即可,或者修改如下
#if defined(ARCH_IS_32BIT)
#    define CACHE_LINE 64
#    define ptr_t uint32_t
#    define intptr_t int32_t
#    define _INTPTR_T_DEFINED //add this line, avoid redefination
#    if defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(__INTEL_COMPILER)
#        include <stdarg.h>
#    else
#        define uintptr_t uint32_t
#    endif
#elif defined(ARCH_IS_64BIT)

这样libxvidcore.dsw就可以顺利编译了
其他工程也可以顺利完成编译.
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值