日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg

發(fā)布時間:2023/12/10 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

實測成功環(huán)境: WIN7 + VS2013 + FFmpeg4.3 和 WIN10 + VS2019 + FFmpeg4.3(N-98819-ge2589ac)

源碼下載

  • FFmpeg源碼

依賴工具

  • MSYS2
  • ?YASM

下載安裝MSYS2; 下載YASM,將文件名改為yasm.exe,將它所在的目錄加入到環(huán)境變量中。

配置頭文件和庫搜索路徑

以下幾種方法任選一種

1.使用vcvarsall.bat

  • 打開cmd,執(zhí)行vcvarsall.bat(一般在C:Program Files (x86)Microsoft Visual Studio 12.0VC目錄下,vcvarsall.bat將會設(shè)置INCLUDE和LIB環(huán)境變量,以便cl能找到對應(yīng)頭文件和.lib文文件);
  • 繼續(xù)在cmd中執(zhí)行msys2安裝目錄下的msys2_shell.cmd
vcvarsall.bat x86 msys2_shell.cmd -use-full-path

2.在VS中打開msys2

  • 在VS中選擇:Tools -> External tools... -> Add

  • 在VS中啟動msys2:Tools->msys2

確保msvc編譯器cl和鏈接器link是否正常

我們使用的是微軟的編譯器cl.exe和鏈接器link.exe,然而msys2自帶有l(wèi)ink.exe,和msvc 的link.exe重名,且前者所在目錄在環(huán)境變量中靠前,所以運行l(wèi)ink命令時實際運行的是msys2的link.exe,這將造成鏈接出錯

解決方法

  • 將<msys2安裝目錄>usrbin下的link.exe重新命名為其它名稱;
  • 或者,想辦法修改PATH的順序

msys2 安裝pkg-config,diffutils,make工具(msys2沒帶這些工具,手動安裝)

pacman -S pkg-config pacman -S diffutils pacman -S make

2.構(gòu)建

切換至FFmpeg源碼目錄,執(zhí)行

./configure --toolchain=msvc make

構(gòu)建成功:

編譯ffplay

雖然ffplay是默認enable的,但ffplay的編譯依賴第三方庫sdl2,所以上述步驟可能因為缺少sdl2依賴而無法編譯出ffplay.exe。
下面是解決方法 sdl2下載 下載VC版本,解壓。

1.配置sdl2對msvc可見

顯然,sdl2頭文件和庫文件必須讓編譯器可以找到, 可以把頭文件目錄添加到INCLUDE環(huán)境變量,將庫文件目錄添加到LIB環(huán)境變量 在MSYS2控制臺執(zhí)行(注意目錄得使用Windows格式 C://...而非 /c/...):

export INCLUDE=$INCLUDE";<sdl2頭文件目錄>" export LIB=$LIB";<sdl2庫文件目錄>"

也可以在cmd執(zhí)行vcvarsall.bat后使用set命令添加

2.配置sdl2對pkg-config可見

另外,sdl2除了得對msvc可見,還要對pkg-config可見,方法如下(實測可用,但不知道有沒有更好的方法) - 新建sdl2.pc 文件,編輯如下

prefix=你的sdl2所在目錄(目錄格式/c/...而非C://...) libdir=${prefix}/lib/x86 includedir=${prefix}/includeName: sdl2 Description: sdl2 Version: 2.0.12 Libs: -L${libdir} -lsdl2

prefix設(shè)置為的sdl2目錄(目錄格式/c/...而非C://...),Version設(shè)置為你的sdl2版本

  • 查看PKG_CONFIG_PATH環(huán)境變量,將sdl2.pc拷貝到其中任一目錄(如<msys2安裝目錄>/usr/lib/pkgconfig)
echo $PKG_CONFIG_PATH

3.啟用sdl2,編譯

最后,使用--enable-sdl2啟用sdl2

./configure --enable-sdl2 --toolchain=msvc make

其他庫的使用方法應(yīng)該類似

問題

1.源碼字符集不匹配的問題

msvc2019

因為msvc2019默認以utf-8編碼讀取源碼,而./configure生成的config.h包含gbk字符 解決方法: - 將config.h以gbk編碼打開(notepad++或vscode),復制全部,再以utf-8打開粘貼覆蓋; - 或者,干脆將utf-8下亂碼的字符刪除

msvc2013

msvc2013默認以gbk編碼讀取源碼,所以方法同msvc2019,不過恰好相反,要確保不出現(xiàn)gbk編碼無法識別的字符

2.編譯出錯,timespec未定義

timespec結(jié)構(gòu)體是C11標準定義的,包含在time.h頭文件中,msvc2013可能沒有完全實現(xiàn)這個標準。 幸好ffmpeg只是借用了這個結(jié)構(gòu)體,而沒有用到相應(yīng)的函數(shù), 所以我們手動定義一下好了:

#ifndef _MY_TIMESPEC_ #define _MY_TIMESPEC_ struct timespec{time_t tv_sec; // Seconds - >= 0long tv_nsec; // Nanoseconds - [0, 999999999]}; #endif

將它拷貝到源碼中,重新make

總結(jié)

以上是生活随笔為你收集整理的ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。