Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat Pautan Statik dengan Perpustakaan Oracle dalam Aplikasi CGO?

Bagaimana untuk Menyelesaikan Ralat Pautan Statik dengan Perpustakaan Oracle dalam Aplikasi CGO?

Patricia Arquette
Patricia Arquetteasal
2024-11-20 22:01:13733semak imbas

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

Menyelesaikan Isu Static Oracle Library untuk CGO Executable

Gambaran Keseluruhan Isu:

Apabila menyusun Aplikasi Go dengan CGO didayakan dan perpustakaan Oracle, ralat berlaku semasa pautan statik. Khususnya, pemaut GCC tidak dapat mencari pustaka Oracle yang diperlukan, libclntsh. Walaupun menentukan laluan perpustakaan semasa penyusunan, isu ini berterusan.

Penyelesaian:

Ikuti langkah ini untuk menyelesaikan isu:

  1. Jana Perpustakaan Libclntst: Jalankan alat genclntst yang terletak dalam direktori bin Oracle untuk mencipta versi statik libclntst: $ORACLE_HOME/bin/genclntst.
  2. Pautan ke Pustaka Dijana: Susun semula aplikasi dan pautkannya dengan perpustakaan libclntst yang baru dijana.
  3. Kenal pasti Simbol Hilang: Gunakan alat nm untuk menganalisis ralat pemaut dan kenal pasti simbol yang hilang.
  4. Selesaikan Baki Simbol: Dalam sesetengah kes, perpustakaan statik tambahan mungkin diperlukan untuk menyelesaikan simbol yang hilang. Untuk versi Oracle yang lebih lama, ini boleh termasuk perpustakaan masa jalan ICC.

Contoh:

Untuk 11gR2, arahan berikut berjaya menyelesaikan isu:

/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

Ingat, menyelesaikan kebergantungan secara manual diperlukan apabila memaut secara statik. Dalam contoh ini, libclntst11.a bergantung pada libippdcmerged.a dan libippsmerged.a.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Pautan Statik dengan Perpustakaan Oracle dalam Aplikasi CGO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn