首頁 > 後端開發 > Golang > 主體

為什麼我無法將我的 Go 應用程式與 Oracle 庫靜態鏈接,如何修復它?

Susan Sarandon
發布: 2024-11-26 19:53:15
原創
905 人瀏覽過

Why Can't I Statically Link My Go Application with Oracle Libraries, and How Can I Fix It?

在靜態建置期間無法找到Oracle 函式庫

嘗試在Ubuntu 上使用Oracle 函式庫建立靜態Go 執行檔時,遇到錯誤試圖將它們聯繫起來。儘管動態建置成功,但靜態編譯器報告無法找到 Oracle 函式庫,儘管所需的檔案存在於正確的位置。

解決方案

  1. 使用 $ORACLE_HOME/bin/relink 工具產生 libclntst.a 函式庫,因為 Oracle 用戶端通常不附帶此檔案。此靜態庫包含靜態連結所需的缺失符號。
  2. 使用 libclntst.a 函式庫編譯應用程式。驗證不存在任何未解析的符號。
  3. 利用 nm 工具來辨識任何未解決的缺失符號的來源。
  4. 例如,在Oracle 11gR2 的情況下,以下編譯命令成功解決了所有依賴關係:
/usr/bin/c++ -Wall -ggdb3 -fPIC \
 CMakeFiles/opassgen.dir/opassgen.cpp.o \
 CMakeFiles/opassgen.dir/dbutils.cpp.o \
 CMakeFiles/opassgen.dir/common.cpp.o  \
 CMakeFiles/opassgen.dir/crypto.cpp.o  \
 n.o  -o opassgen                      \
 -rdynamic -static-libgcc -L. -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic \
 /home/oracle/ivan/openssl-1.0.1t/libcrypto.a  \
 /oracle/u01/db/11.2.0.4/lib/libclntst11.a     \
 /oracle/u01/db/11.2.0.4/lib/libippdcmerged.a  \
 /oracle/u01/db/11.2.0.4/lib/libippsmerged.a   \
 -Wl,--whole-archive libtrotl.a -Wl,--no-whole-archive \
 -lpthread -ldl
登入後複製

此命令包含用於解決依賴關係的附加靜態庫,包括libippdcmerged.a 和libippsmerged.a.

總之,靜態連結需要手動解析所有依賴項,這可能需要包含通常不包含在動態連結中的其他函式庫。

以上是為什麼我無法將我的 Go 應用程式與 Oracle 庫靜態鏈接,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板