Oracle データベースに接続する静的バイナリを構築しようとしていますが、エラーが発生しましたリンクフェーズ中。問題の詳細な分析と解決策は次のとおりです:
/usr/bin/ld: cannot find -lclntsh
このエラーは、コンパイラが Oracle ライブラリ libclntsh.a を見つけられないことを示します。
構成には、ライブラリの動的バージョンがすでに含まれています動的リンクには (-L/usr/lib/oracle/12.1/client64/lib -lclntsh) を使用しますが、静的リンクには静的バージョン (.a) を使用する必要があります。
Oracle ライブラリを使用して静的 CGO 実行可能ファイルをビルドするには、次の手順に従う必要があります。手順:
Oracle の再リンク ツールを使用します: $ORACLE_HOME/bin/relink ツールを使用して、libclntst.a という名前の静的ライブラリを生成します:
$ORACLE_HOME/bin/relink all
アプリをリンクするlibclntst.a: アプリケーションを静的ライブラリにリンクしてみてください:
CGO_ENABLED=1 go build -work -x -ldflags " -v -linkmode external -extldflags -static" -L/usr/lib/oracle/12.1/client64/lib oracletest.go
例:コマンドは、静的にリンクされた実行可能ファイルを正常にビルドします。 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
Oracle ライブラリを使用して静的にリンクされた CGO 実行可能ファイルを構築することは、複数のライブラリの依存関係により困難になる場合があります。提供されている解決策に従うことで、Oracle データベースに接続する静的バイナリを正常に生成できます。
以上がLinux/Ubuntu 上の CGO で Oracle データベースに接続する際の静的リンク エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。