天天看點

vs2013編譯ffmpeg之九 libassvs2013編譯libass

vs2013編譯libass

ShiftMediaProject下載下傳最新的libass,對應于官方版本0.13.7。

VS2013打開libass-master\SMP\libass.sln,如果遇到libass.vcxproj加載失敗,則編輯libass.vcxproj,将裡面的yasm.props改成vsyasm.props,yasm.targets改成vsyasm.targets,然後重新打開libass.sln就ok了。yasm在編譯其他第三方庫的時候已經準備好了的,請參考這裡。

由于libass依賴很多第三方軟體(ShiftMediaProject的libass依賴于freetype-2.5.3、fribidi、fontconfig、libiconv-1.9.2、HarfBuzz),而ShiftMediaProject裡面把這些都加進來了,有其特定的目錄安排,但這裡沒有按其方法來,第三方軟體的頭檔案,都是按自己的路徑來,是以頭檔案路徑需要修改。

此次沒有編譯HarfBuzz,直接在config.h裡面修改,注釋掉CONFIG_HARFBUZZ的定義:

/* found harfbuzz-ng via pkg-config 
#define CONFIG_HARFBUZZ 1*/
           

Project properties->Configuration properties->C/C++->Code generation->Runtime Library改成Mtd,和ffmpeg保持一緻。

編譯32位版本的時候,asm檔案的編譯,下面的錯誤:

1>..\libass\x86\x86inc.asm(47): error : undefined symbol `ARCH_X86_64' in preprocessor
1>..\libass\x86\rasterizer.asm(854): error : (FILL_GENERIC_TILE:52) undefined symbol `HAVE_ALIGNED_STACK' in preprocessor
1>..\libass\x86\rasterizer.asm(854): error : (GET_RES_ADDR:1) undefined symbol `HAVE_ALIGNED_STACK' in preprocessor
           

解決辦法,例如編譯debug版本的:

vs2013編譯ffmpeg之九 libassvs2013編譯libass

工程屬性->Yasm Assembler->Symbols裡面加上下面的定義:

WIN32=
ARCH_X86_64=
HAVE_ALIGNED_STACK=
           

同時工具欄選擇Debug、x86:

vs2013編譯ffmpeg之九 libassvs2013編譯libass

這個libass的工程屬性裡面有很多配置,包括Debug、release、x86、x64等,編譯的時候要注意選擇,避免在工程屬性裡面修改的和編譯的時候用的不是同一套屬性。如果要編譯64位版本的,ARCH_X86_64要定義成1,64位版本的未測試。

編譯成功後,ffmpeg下面的pc_files\libass.pc需要修改裡面的路徑,然後再重新configure并編譯ffmpeg。