xvid-core1.1.2编译方法(vc6,vs2005)
生活随笔
收集整理的這篇文章主要介紹了
xvid-core1.1.2编译方法(vc6,vs2005)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于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上編譯該庫的一點心得。
希望對大家有用。
主要是起到備忘的作用,我主要講講在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上編譯該庫的一點心得。
希望對大家有用。
總結
以上是生活随笔為你收集整理的xvid-core1.1.2编译方法(vc6,vs2005)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 硬盘序列号_java肿么获取硬
- 下一篇: 获取硬盘序列号(VC)