在Windows下編譯ffmpeg完全手冊

本文的內容幾乎全部來自于FFmpeg on Windows,但是由于國內的網絡封鎖,很難訪問這個域名下的內容,因此我一方面按照我自己的理解和實踐做了翻譯,另一方面也是為了能提供一個方便的參考方法。

注:

1.?????? 對于compile和build這兩個詞,本文統一的使用編譯這個詞,根據上下文讀者應能區分語義上的差別。

? 本文的目的是提供一切與FFmpeg在Windows下的相關幫助。它最初是一個針對用MSys+MinGW系統編譯的手把手的教程,現在也增加了如何在你的項目中鏈接FFmpeg所產生的庫(C++,C#)。? ?
? ?? ?我們不討論Cygwin,因為它的工作方式基本上與Unix系統相一致。 開始之前,首先要明確以下幾點:

1.?????? 由于MSVC++并不嚴格的遵循C標準,因此FFmpeg不能使用MSVC++來編譯,而且將來也不會支持。所以整個編譯過程必須使用MSys+MinGW系統來完成。

2.?????? 如果你選擇編譯動態鏈接庫(dll),這些庫將和其他的動態鏈接庫一樣在使用上沒什么差別。你可以使用MSVC++來鏈接這些庫進入到你的程序,只有這種情況下MSVC++是被支持的。

介紹本指南是十分冗長的。如果你已經以前曾有過編譯開源軟件的經驗,你可以嘗試讀一下這篇。它要簡短的多,只需要一些小的微調就能正常工作。
? ???但是如果你遇到了任何問題,在你向ffmpeg的郵件列表報告錯誤時請先仔細的通讀本文,它是非常直觀的,不少地方的細節甚至可能過于詳細了。我們試圖涵蓋一切可能出錯的地方,如果你精確的遵照文中的方法,你不會在Windows環境下的FFmpeg上有任何問題。盡你的努力去解決你所遇到的問題,絕大多數的FFmpeg開發人員不使用Windows,所以他們幫不了你什么。

? ? 預備這里的內容可能和本文沒有什么關系,但是我不想留下任何可能出錯的地方。對于絕大多數人來說,這一部分可以跳過。 你需要一個解壓的工具軟件支持“*.tar.gz”和“*.tar.bz2”文件。你將需要把這些壓縮包解壓縮到指定的目錄下。如果你已經有這樣的程序了,并且知道如何解壓到特定目錄下,請閱讀準備MSys+MinGW系統。 這里我將演示如何使用7-Zip或WinRAR來解壓縮。推薦使用7-Zip,因為它是開源且免費的。

  • 7-Zip
  • WinRAR

準備MSys+MinGW系統獲取最新的MSys+MinGW系統。注意以下幾個包的版本要求:

  • 不要使用2.0.4的bash,這個是有缺陷的,2.05b的bash用來編譯FFmpeg沒有問題,但是更推薦3.1版本。
  • 使用msys-1.0.dll-SNAP-1.0.11-2006.04.23
  • 不要使用binutils-2.15.91-20040904-1,它無法正確的鏈接。

? ? 如果你已經安裝配置完畢,那么請閱讀下一部分用SVN方式獲取FFmpeg(http://www.aurora-x.net/wiki/CompileFFmpegWindows#FFmpeg_SVN),否則的話請依次執行下面的步驟。

  • 安裝MSys
  • 安裝MinGW
  • 整合MinGW和MSys

? ? 用SVN方式獲取FFmpeg如果你已經知道如何獲取FFmpeg的源代碼,那么請閱讀下一部分編譯。 由于FFmpeg的源代碼存放在SVN倉庫里,你必須使用命令行程序或是圖形界面程序來訪問。我個人推薦TortoiseSVN,因為它和Windows資源管理器結合的非常棒,所以我只介紹使用TortoiseSVN的方法。 編譯

  • 編譯靜態庫
  • 編譯動態庫

鏈接

  • 用MSVC++鏈接DLL庫
  • 用MSVC++創建output_example.exe

編譯FFplay你必須事先安裝了SDL-devel。

1.?????? 解壓該軟件包。

2.?????? 將lib下的所有文件復制到C:/msys/mingw/lib

3.?????? 將include下的所有文件復制到C:/msys/mingw/include

4.?????? 將bin下的i386-mingw32msvc-sdl-config復制到C:/msys/mingw/bin,并重命名為sdl-config

5.?????? 將bin下的SDL.dll復制到C:/msys/mingw/bin

?

[Copy to clipboard]

CODE:

SDL.dll必須在ffplay.exe德PATH路徑中,程序才能啟動。在MSys環境下mingw/bin在PATH環境變量中,因此運行ffplay.exe不會有問題。但如果你想在MSys外部運行,則應SDL.dll復制到和ffplay.exe同一個目錄下。


現在你可以按照前面的方式靜態或動態重新編譯FFmpeg,在運行configure腳本后,它將正確的找到SDL和ffplay。

對第三方庫的支持

?你必須完全的理解了編譯動態庫部分。

? ???在向FFmpeg的二進制文件中添加其他的庫時,你必須首先考慮庫是以靜態還是動態的鏈接到FFmpeg中。不要把這個和FFmpeg本身是靜態/動態鏈接庫搞混,你可以把靜態的將第三方庫鏈接到FFmpeg中,但是FFmpeg的庫本身是動態加載的dll庫。

? ? 考慮這種情況:你想要更換xvidcore卻不希望重新編譯FFmpeg,那你就應該把xvidcore編譯成動態鏈接庫。

? ? 其次你要考慮的是這些第三方庫被安裝到MSys系統中的什么位置上。

? ???對于絕大多數的是庫,如果你把它們安裝到缺省路徑,你就得向FFmpeg的configure腳本傳遞額外的參數,這樣才能在編譯的時候找到這些庫。

? ? 如果你把這些庫安裝到gcc的缺省includelib路徑下,就不需要額外指定這些參數了。如果你希望把動態庫和靜態庫分開保存,那就不得不指定路徑。這樣的路徑被稱為你所安裝的庫的prefix。 如果你把庫安裝在了非gcc的缺省尋找路徑,你必須向FFmpeg的configure腳本傳遞這些路徑信息。

[Copy to clipboard]

CODE:

--extra-ldflags=-L<prefix>/lib --extra-cflags=-I<prefix>/include


類似這樣:

[Copy to clipboard]

CODE:

./configure --enable-memalign-hack --enable-mp3lame??-–extra-ldflags=-L/usr/local/lib??--extra-cflags=-I/usr/local/include


在MSys下gcc的缺省路徑是 /mingw另外,如果你把這些庫的dll安裝后,確保你的應用程序能在PATH環境變量中找到相應的dll。 我將展示下面這些庫的安裝:

  • zlib
  • mp3lame
  • xvidcore
  • libogg
  • libvorbis
  • faad
  • faac
  • amr_nb
  • amr_wb
  • libdts
  • libgsm
  • x264

引用原文:http://www.aurora-x.net/wiki/CompileFFmpegWindows

?

安裝MSys

??? 下載如下的文件:

  • MSYS-1.0.11-2004.04.30-1.exe
  • msys-1.0.dll-SNAP-1.0.11-2006.04.23.tar.bz2
  • bash-3.1-MSYS-1.0.11-snapshot.tar.bz2

接下來依次安裝這些文件:

MSYS-1.0.11-2004.04.30-1.exe

運行 MSYS-1.0.11-2004.04.30-1.exe.

????????

Yes

Next >

如果你接受許可協議,點Yes

Next >

選擇MSys安裝的路徑,推薦C:/msys。點Next >

Next >

選擇MSys在啟動菜單中位置,推薦MinGW,點Next >

上載新附件"Install.png"

Install。不久你將看到

輸入n后回車

再按一下回車。

把所有打勾的框去掉,然后點Finish

msys-1.0.dll-SNAP-1.0.11-2006.04.23.tar.bz2

  • 將該壓縮包解壓到C:/msys/bin
  • 在Windows資源管理器中打開C:/msys/bin目錄。
  • 刪除文件msys-1.0.dll(你剛才已經解壓了一個新的版本了,所以刪除舊的沒有問題)。
  • 重命名new-msys-1.0.dllmsys-1.0.dll

bash-3.1-MSYS-1.0.11-snapshot.tar.bz2

  • 在本地目錄解壓該壓縮包。
  • 產生一個名為bash-3.1的目錄。
  • 在該目錄下有一個子目錄名為bin,其他的目錄并不關心。
  • 復制bin目錄中的所有文件到C:/msys/bin
  • 提示是否要覆蓋sh.exe的時候,選擇確定。

修改 "msys.bat"

用文本編輯器打開C:/msys/msys.bat,譬如記事本等。如果你打算用MSVC++編譯你的程序(注意:是你的程序,不是FFmpeg),你需要有.lib文件才能鏈接到FFmpeg的庫。這些.lib文件可以使用微軟的工具鏈中lib命令產生。為此,你的機器上必須已經安裝了微軟的Visual Studio或是Visual C++。把下面這行加到msys.bat的最前面,把路徑替換成你機器上vcvars32.bat實際存在的路徑。

?

call "C:/Program Files (x86)/Microsoft Visual Studio .NET 2003/vc7/bin/vcvars32.bat"

如果你的操作系統是Windows x64,那你必須把下面的這些內容插入到:_WindowsNT標簽后面(行36):

rem Hopefully a temporary workaround for getting MSYS shell to run on x64

rem (WoW64 cmd prompt sets PROCESSOR_ARCHITECTURE to x86)

if not "x%PROCESSOR_ARCHITECTURE%" == "xAMD64" goto _NotX64

set COMSPEC=%WINDIR%/SysWOW64/cmd.exe

%COMSPEC% /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9

goto EOF

:_NotX64

?

?

安裝MinGW

下載這些文件:

  • binutils-2.17.50-20060824-1.tar.gz
  • gcc-core-3.4.5-20060117-1.tar.gz
  • gcc-g++-3.4.5-20060117-1.tar.gz
  • mingw-runtime-3.10.tar.gz
  • w32api-3.7.tar.gz (站點上找不到該文件,不過這個鏈接是有效的)

把它們全部解壓到C:/msys/mingw

?

整合MinGWMSys

復制C:/msys/etc/fstab.sampleC:/msys/etc/fstab

用文本編輯器打開C:/msys/etc/fstab編輯。(注意:使用一個支持Unix換行風格的編輯器)

把下面這行

c:/mingw??????? /mingw

改為

c:/msys/mingw?? /mingw

?

?

編譯靜態庫

??? 如果你的系統已經按照所安裝配置,那么下面的動作將正常執行:

從啟動菜單出進入

開始->程序->MinGW->MSys->msys

一個米色背景的窗口會出現在你的眼前,這是一個運行著bashrxvt程序

?

這是一個類Linux的shell并且在Windows上運行的就像是在使用一個真正的Linux shell。

  1. 目錄名使用正斜杠來分割,而不是Windows所使用的反斜杠(象"C:/ffmpeg"而不是"C:/ffmpeg")。
  2. 盤符(例如"C:/")可以從根目錄處訪問(像這樣"/C/")。
  3. 文件名或目錄名中的空格必須用雙引號括起(例如這樣"/C/Program Files (x86)",帶有雙引號)。

切換目錄到你之前存放FFmpeg源代碼的目錄,如果你嚴格的按照本文的示范,那么就應該輸入下面的命令來切換:

cd /C/ffmpeg

?

首先配置FFmpeg,選擇你所需要的部分,如果你還想安裝額外的庫(例如mp3lame,或xvid),參考后面的使用第三方庫部分。不過先確保完成了這一部分和下一部分動態庫編譯。

如果你不知道項包含什么,那么就輸入:

./configure --enable-memalign-hack

--enable-memalign-hack選項是在FFmpegWindows上編譯成功所必須指定的。

待配置完成后,將回到命令提示符,你應該看到如下的畫面:

如果沒有錯誤的話,你現在就可以"make" FFmpeg了,在提示符后輸入:

make

編譯的過程將持續很長時間。如果一切正常,結束后將返回提示符,并有如下的輸出畫面

程序已經編譯好了,你可以在ffmpeg的目錄下找到ffmpeg.exe這個文件。之后,你應該執行安裝步驟

make install

得到如下的輸出畫面:

這將會復制所有生成的重要文件到系統的"Program Files"目錄下。通常"Program Files"目錄是"C:/Program Files",但也有可能會不同。要了解確切的路徑,在提示符下輸入:

echo $PROGRAMFILES

然后將Windows風格的路徑名改為Linux風格的路徑名,進入該目錄,在該目錄下輸入

cd FFmpeg

很好,你現在可以方便的運行ffmpeg.exeFFmpeg已經成功的編譯并靜態鏈接了。

當然你得知道正確的參數使用方法,要產生Windows兼容的文件請參考http://ffmpeg.mplayerhq.hu/faq.html#SEC9以獲取更多的信息。

?

編譯動態庫

編譯動態庫和編譯靜態庫沒有什么明顯的差別,只不過你要明確地告訴configure腳本你現在將編譯動態庫。

如果還沒有MSys的話,那么現在啟動它:

開始->程序->MinGW->MSys->msys

切換到FFmpeg的源代碼目錄,在開始編譯前先清理上一次留下的中間文件是個好習慣:

make distclean

現在需要向configure腳本多傳遞兩個參數:

./configure --enable-shared --disable-static --enable-memalign-hack

后面的則不變:

make

make install

在Program Files下的FFmpeg目錄里,現在應該多了一些文件:

ffmpeg.exe

avcodec.dll

avcodec-51.dll

avcodec-51.11.0.dll

avutil.dll

avutil-49.dll

avutil-49.0.0.dll

avformat.dll

avformat-50.dll

avformat-50.5.0.dll

include/

lib/

你可能已經注意到了每個庫都有三個對應的dll,它們是同一份文件拷貝。

  • SLIBNAME contains only the library name (avcodec.dll)
  • SLIBNAME_WITH_MAJOR contains library name and major version number (avcodec-51.dll)
  • SLIBNAME_WITH_VERSION contains library name and full version number (avcodec-51.11.0.dll)

因為MSys將ln(制作符號鏈接的程序)以cp(文件復制)來對待,所以就產生了這些相同的拷貝。

除了消耗點磁盤外不會有任何其他問題,不過對于所有使用這些庫的可執行文件來說只鏈接到SLIBNAME_WITH_MAJOR,因此你可以放心的刪除另外兩個。換句話說你只需留下avcodec-51.dll、avformat-50.dll 和 avutil-49.dll就行了。

include目錄包含了一個名為ffmpeg的子目錄,這個子目錄里存放了所有其他應用程序訪問FFmpeg庫時所需包含的頭文件。

lib目錄下有一個子目錄pkgconfig。如果你不知道它是干嗎的,那就忽略它吧。

MSVC++鏈接DLL

??? 這是絕大多數人發生誤解的地方:FFmpeg SVN本身不能用MSVC++編譯,但是如果它在MinGW下正確的被編譯,那么你可以把生成的dll用在任何支持dll的程序里。

注意你將用到的不是ffmpeg.exe,而是那些dll

在開始往下閱讀之前,你應該確保你完成并理解了編譯靜態庫編譯動態庫部分的內容。這不是推薦的,而是必須的。


msys提示符下輸入:

lib

如果你看到如下的畫面,說明一切OK,注意有Microsoft (R) Library Manager字樣。

上面假定了你是在完成了編譯動態庫后在FFmpeg目錄下執行的,如果你還沒有編譯動態庫,那么依次執行如下:

cd /c/ffmpeg
make distclean
./configure --enable-shared --disable-static --enable-memalign-hack
make
make install
lib

ffmpeg目錄下有三個子目錄名字分別為:libavutillibavcodec libavformat。在這三個目錄下都有一個SLIBNAME_WITH_MAJOR.lib這樣的文件,分別是avcodec-51.libavformat-50.lib avutil-49.libMSVC++從這些文件中才能知道dll的導出函數。把這三個文件拷貝到Program Files下的FFmpeg下的lib目錄。

現在通過包含include/ffmpeg下的頭文件,和使用剛才我們拷貝的那三個lib文件進行鏈接,就能夠編寫具備FFmpeg功能的應用程序了。

我提供了一個示例:用MSVC++創建output_example.exe

MSvc++創建output_example.ex

??? 這是絕大多數人發生誤解的地方:FFmpeg SVN本身不能用MSVC++編譯,但是如果它在MinGW下正確的被編譯,那么你可以把生成的dll用在任何支持dll的程序里。

注意你將用到的不是ffmpeg.exe,而是那些dll

在開始往下閱讀之前,你應該確保你完成并理解了編譯靜態庫編譯動態庫部分的內容。這不是推薦的,而是必須的。


msys提示符下輸入:

lib

如果你看到如下的畫面,說明一切OK,注意有Microsoft (R) Library Manager字樣。

??????

上面假定了你是在完成了編譯動態庫后在FFmpeg目錄下執行的,如果你還沒有編譯動態庫,那么依次執行如下:

cd /c/ffmpeg
make distclean
./configure --enable-shared --disable-static --enable-memalign-hack
make
make install
lib

ffmpeg目錄下有三個子目錄名字分別為:libavutillibavcodec libavformat。在這三個目錄下都有一個SLIBNAME_WITH_MAJOR.lib這樣的文件,分別是avcodec-51.libavformat-50.lib avutil-49.libMSVC++從這些文件中才能知道dll的導出函數。把這三個文件拷貝到Program Files下的FFmpeg下的lib目錄。

現在通過包含include/ffmpeg下的頭文件,和使用剛才我們拷貝的那三個lib文件進行鏈接,就能夠編寫具備FFmpeg功能的應用程序了。

我提供了一個示例:用MSVC++創建output_example.exe

MSvc++創建output_example.exe


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

padding和卷積的區別_TensorFlow筆記1——20.CNN卷積神經網絡padding兩種模式SAME和VALID...

第1種解說&#xff1a;(核心最后一張圖&#xff0c;兩種填充方式輸出的形狀尺寸計算公式)在用tensorflow寫CNN的時候&#xff0c;調用卷積核api的時候&#xff0c;會有填padding方式的參數&#xff0c;找到源碼中的函數定義如下&#xff08;max pooling也是一樣&#xff09;&am…

MORMOT數據庫連接池

MORMOT數據庫連接池 MORMOT封裝了一堆的PROPS控件&#xff0c;用于連接各種數據庫。 MORMOT的封裝是武裝到了牙齒的&#xff0c;這堆PROPS控件居然數據庫連接池也封裝好了。這就為我們省了不少事&#xff0c;筆者非常喜歡&#xff01; 下面拿TOleDBMSSQLConnectionProperties控…

循環神經網絡變形之 (Long Short Term Memory,LSTM)

1、長短期記憶網絡LSTM簡介 在RNN 計算中&#xff0c;講到對于傳統RNN水平方向進行長時刻序列依賴時可能會出現梯度消失或者梯度爆炸的問題。LSTM 特別適合解決這種需要長時間依賴的問題。 LSTM&#xff08;Long Short Term Memory&#xff0c;長短期記憶網絡&#xff09;是R…

Windows 系統下使用 MinGW + MSYS + GCC 編譯 FFMPEG

一定要按照順序操作&#xff0c;否則你很可能持續遇到很多奇怪的問題&#xff08;ffmpeg對編譯系統版本要求比較高&#xff09;。 1. www.mingw.org: 下載并安裝 MinGW 5.1.4 (http://jaist.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe)&#xff0c;安裝時選中 g, m…

eclipse怎樣改編碼格式_Eclipse中各種編碼格式及設置

操作系統&#xff1a;Windows 10(家庭中文版)Eclipse版本&#xff1a;Version: Oxygen.1a Release (4.7.1a)剛看到一篇文章&#xff0c;里面介紹說Ascii、Unicode是編碼&#xff0c;而GBK、UTD-8等是編碼格式。Java中的編碼問題(by 迷失之路)&#xff1a;https://www.cnblogs.c…

UE4 ShooterGame Demo的開火的代碼

之前一直沒搞懂按下鼠標左鍵開火之后&#xff0c;代碼的邏輯是怎么走的&#xff0c;今天看懂了之前沒看懂的部分&#xff0c;進了一步 ShooterCharacter.cpp void AShooterCharacter::OnStartFire() {AShooterPlayerController* MyPC Cast<AShooterPlayerController>(Co…

kafka 異常:return ‘<SimpleProducer batch=%s>‘ % self.async ^ SyntaxError: invalid syntax

Python3.X 執行Python編寫的生產者和消費者報錯&#xff0c;報錯信息如下&#xff1a; Traceback (most recent call last): File "mykit_kafka_producer.py", line 9, in <module> from kafka import KafkaProducer File "/usr/local/lib/python3.7/sit…

python 分布式計算框架_漫談分布式計算框架

如果問 mapreduce 和 spark 什么關系&#xff0c;或者說有什么共同屬性&#xff0c;你可能會回答他們都是大數據處理引擎。如果問 spark 與 tensorflow 呢&#xff0c;就可能有點迷糊&#xff0c;這倆關注的領域不太一樣啊。但是再問 spark 與 MPI 呢&#xff1f;這個就更遠了。…

Codeforces 899D Shovel Sale

題目大意 給定正整數 $n$&#xff08;$2\le n\le 10^9$&#xff09;。 考慮無序整數對 $(x, y)$&#xff08;$1\le x,y\le n, x\ne y$&#xff09;。 求滿足 「$xy$ 結尾連續的 9 最多」的數對 $(x,y)$ 的個數。 例子&#xff1a; $n50$&#xff0c;$(49,50)$ 是一個滿足條件的…

Windows系統使用minGW+msys 編譯ffmpeg 0.5的全過程詳述

一.環境配置 1.下載并安裝 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourcef … -5.1.4.exe)&#xff0c;安裝時選中 g, mingw make。建議安裝到c:/mingw. 2.下載并安裝 MSYS-1.0.11-rc-1.exe (http://jaist.dl.sourceforge.net/sourcef … 1-rc-1.exe)&#xff0c;安…

Liunx安裝gogs,mysql,jdk,tomcat等常用軟件

Liunx CentOS系統采用yum安裝Mysql 一.安裝mysql客戶端 yum -y install mysql 二.安裝mysql服務器端 [注意:由于CentOS7下的不自帶mysql-server,所以得先安裝資源包,步驟: 1.wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm (采用wget獲取必須有wge…

stm32單片機端口映射_STM32單片機的重映射與地址映射的使用方法及步驟

重映射STM32中對于一些端口的外設已經被其他引腳所使用&#xff0c;這是就需要用端口重映射來解決了&#xff0c;很方便。以USART1為例重映射的步驟為&#xff1a;打開重映射時鐘和USART重映射后的I/O口引腳時鐘&#xff0c;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_A…

python 第三方模塊 yaml - 處理 YAML (專門用來寫配置文件的語言)

markdown 的配置使用 Yaml —— Yet Another Markup Language &#xff1a;另一種標記語言。 簡介 YAML 是專門用來寫配置文件的語言&#xff0c;非常簡潔和強大&#xff0c;遠比 JSON 格式方便。 YAML在python語言中有PyYAML安裝包。 YAML 語言&#xff08;發音 /?jm?l/ &…

程序員 賺錢

業余編程賺錢 程序員的好方法 現在的人生活水平高了&#xff0c;開銷也大了&#xff0c;同時對于一些技術性人員來說有很多種&#xff0c;有些程序員自己開公司&#xff0c;開發自己的產品&#xff0c;年賺百萬&#xff0c;有些程序員還在給別人打工&#xff0c;每天累死累活的…

java合并單元格的快捷鍵_java poi合并單元格問題

使用poi導出的execl合并單元格&#xff0c;會出現下圖問題整個單元格看似合并了&#xff0c;但是文字沒有垂直居中&#xff0c;而且execl中所有的合并都會在第三行開始出現灰色分層樣式合并單元格偽代碼String upCompareField ""; //上一行的對比值for(int i 0; i …

webpack自動化構建腳本指令npm run dev/build

指令 為不同環境配置可執行指令&#xff0c;我們使用npm scripts方式&#xff0c;在package.json文件中配置執行指令&#xff1a; {"scripts": {"start": "cross-env NODE_ENVdev webpack-dev-server","build": "cross-env NODE_…

前端之 form 詳解

認識表單 在一個頁面上可以有多個form表單&#xff0c;但是向web服務器提交表單的時候&#xff0c;一次只可以提交一個表單。要聲明一個表單&#xff0c;只需要使用 form 標記來標明表單的開始和結束&#xff0c;若需要向服務器提交數據&#xff0c;則在form標簽中需要設置act…

代碼 優化 指南 實踐

C代碼優化方案 華中科技大學計算機學院 姓名&#xff1a; 王全明 QQ&#xff1a; 375288012 Email&#xff1a; quanming1119163.com 目錄 目錄 C代碼優化方案 1、選擇合適的算法和數據結構 2、使用盡量小的數據類型 3、減少運算的強度 &#xff08;1&…

.12-淺析webpack源碼之NodeWatchFileSystem模塊總覽

剩下一個watch模塊&#xff0c;這個模塊比較深&#xff0c;先大概過一下整體涉及內容再分部講解。 流程圖如下&#xff1a; NodeWatchFileSystem const Watchpack require("watchpack");class NodeWatchFileSystem {constructor(inputFileSystem) {this.inputFileSy…

Python 第三方模塊之 beautifulsoup(bs4)- 解析 HTML

簡單來說&#xff0c;Beautiful Soup是python的一個庫&#xff0c;最主要的功能是從網頁抓取數據。官方解釋如下&#xff1a;官網文檔 Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。 它是一個工具箱&#xff0c;通過解析文檔為用戶提供…