CGO アプリケーションでの Oracle ライブラリの静的リンク エラーを解決するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-20 22:01:13
オリジナル
725 人が閲覧しました

How to Resolve Static Linking Errors with Oracle Libraries in CGO Applications?

CGO 実行可能ファイルの静的 Oracle ライブラリの問題の解決

問題の概要:

CGO が有効になっている Go アプリケーションと Oracle ライブラリでは、静的リンク中にエラーが発生します。具体的には、GCC リンカーは必要な Oracle ライブラリ libclntsh を見つけることができません。コンパイル中にライブラリ パスを指定しても、問題は解決しません。

解決策:

問題を解決するには、次の手順に従ってください:

  1. Generate Libclntst Library: Oracle の bin にある genclntst ツールを実行しますlibclntst の静的バージョンを作成するディレクトリ: $ORACLE_HOME/bin/genclntst.
  2. 生成されたライブラリへのリンク: アプリケーションを再コンパイルし、新しく生成された libclntst ライブラリとリンクします。
  3. 欠落しているシンボルの特定: nm ツールを使用するリンカー エラーを分析し、欠落しているシンボルを特定します。
  4. 残りのシンボルを解決する: 場合によっては、欠落しているシンボルを解決するために追加の静的ライブラリが必要になることがあります。古い Oracle バージョンの場合、これらには ICC ランタイム ライブラリが含まれている可能性があります。

例:

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
ログイン後にコピー

静的にリンクする場合は、依存関係を手動で解決する必要があることに注意してください。この例では、libclntst11.a は libippdcmerged.a および libippsmerged.a に依存します。

以上がCGO アプリケーションでの Oracle ライブラリの静的リンク エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート