CMake構建學習筆記4-libjpeg庫的構建

charlee44發表於2024-08-25

libjpeg是一個廣泛使用的開源庫,用於處理JPEG(Joint Photographic Experts Group)影像格式的編碼、解碼、壓縮和解壓縮功能,是許多影像處理軟體和庫的基礎。

libjpeg本身的構建沒什麼特別的,不過值得說道的是libjpeg存在一個高效能分支叫做libjpeg-turbo,透過彙編程式碼使用SIMD(Single Instruction, Multiple Data)指令集(如 MMX、SSE2、AVX2 等),可以顯著加快JPEG影像的壓縮和解壓縮速度。據說在同樣的硬體環境下,libjpeg-turbo的速度通常是libjpeg的2到6倍。

libjpeg的一個經典版本是v6blibjpeg-turbo對這個版本保持了API相容性,因此可以作為libjpeg的直接替代品,而無需對現有程式碼進行修改。libjpeg-turbo對於v7,v8只是做到了部分相容,但是其實libjpeg目前已經發展到v9了。筆者個人認為libjpeg和libjpeg-turbo是C語言實現的,介面比較穩定,這個相容性還是可以保證的。另外,jpeg的格式也固定很久了改動也不太大,估計也不上版本太高的功能,因此還是決定使用libjpeg-turbo。

構建libjpeg-turbo的關鍵指令如下所示:

# 配置CMake  
cmake .. -G "$Generator" -A x64 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$InstallDir" -DENABLE_STATIC=off

# 構建階段,指定構建型別
cmake --build . --config RelWithDebInfo

# 安裝階段,指定構建型別和安裝目標
cmake --build . --config RelWithDebInfo --target install

除了ENABLE_STATIC是libjpeg-turbo自定義的構建選項,其他指令和構建選項本系列其他幾篇博文都介紹過。不過有一點需要提示一下,libjpeg-turbo編譯用到了組合語言,因此需要指定一個組合語言編譯器NASM,只要是安裝在預設目錄就能夠自動識別:

CMake變數和專案配置

當然,不需要NASM也能構建成功,不過libjpeg-turbo就不能得到最佳的效能最佳化了。

相關文章