嘗試在Linux/Ubuntu 上使用Oracle 庫構建靜態CGO 可執行文件:意外錯誤
問題:
建構Linux/Ubuntu 上與CGO 和Oracle庫靜態連結的可執行檔會在建置過程中導致錯誤,特別是找不到 Oracle 庫 -lclntsh。
解決方案:
-
產生靜態庫(libclntst.a):
a.如果尚未完成,請安裝完整的Oracle 資料庫包。
b.執行 $ORACLE_HOME/bin/genclntst 以產生缺少的靜態函式庫 libclntst12.a。
-
與產生的函式庫的連結:
a。修改建置指令以包含產生的函式庫 libclntst12.a.
b。範例: go build -work -x -ldflags " -v -linkmode external -extldflags -static -L/usr/lib/oracle/12.1/client64/lib -lclntst12" ${MAIN_SRC}
-
處理遺失的符號(如果有):
a。使用 ldd 檢查靜態連結的可執行檔中是否有未解析的符號。
b.使用 nm 找出 Oracle 庫中缺失符號的來源。 c.與其他函式庫連結以解決遺失的符號。 -
附加說明:
a。靜態連結需要手動解決所有依賴關係。 b.對於較舊的 Oracle 版本,可能需要 ICC 運行時的額外靜態庫。
以上是如何在 Linux/Ubuntu 上使用 Oracle 函式庫建置靜態 CGO 可執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!