這是因為 whisper.cpp 的 Go 綁定需要 CGO 編譯,并且需要正確鏈接到 whisper.cpp 的 C 庫。錯誤信息顯示找不到 C 的類型定義。
解決方案:
- 確保已安裝 whisper.cpp 到系統(tǒng):
# 克隆并編譯 whisper.cpp
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
cmake -B build
cmake --build build -j
sudo cmake --install build # 安裝到 /usr/local
- 設(shè)置 CGO 環(huán)境變量:
export CGO_ENABLED=1
export CGO_LDFLAGS="-L/usr/local/lib"
export CGO_CFLAGS="-I/usr/local/include"
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
- 清理 Go 緩存并重新編譯:
cd backend
go clean -cache
go mod tidy
go build
- 驗證庫文件存在:
ls -l /usr/local/lib/libwhisper.*
ls -l /usr/local/include/whisper.h
如果你使用的是 macOS,可能還需要:
# macOS 使用 Homebrew 安裝可能更簡單
brew install whisper-cpp
# 或者手動指定路徑
export CGO_LDFLAGS="-L/opt/homebrew/lib"
export CGO_CFLAGS="-I/opt/homebrew/include"
注意:whisper.cpp 的 Go 綁定要求本地必須有編譯好的 whisper.cpp C 庫,這就是為什么 Dockerfile.base 中需要編譯安裝 whisper.cpp 的原因。
案例1
#!/bin/bash
# 設(shè)置 whisper.cpp 庫路徑
export DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"
export CGO_ENABLED=1
export CGO_LDFLAGS="-L/usr/local/lib"
export CGO_CFLAGS="-I/usr/local/include"
# 運行應用
go run main.go