Mengapa Saya Tidak Boleh Memautkan Aplikasi My Go secara Statik dengan Perpustakaan Oracle, dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Lepaskan: 2024-11-26 19:53:15
asal
905 orang telah melayarinya

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

Tidak Dapat Menemui Perpustakaan Oracle Semasa Binaan Statik

Dalam percubaan untuk mencipta Go statik boleh laku dengan perpustakaan Oracle pada Ubuntu, ralat telah ditemui semasa cuba menghubungkan mereka. Walaupun binaan dinamik berjaya, pengkompil statik melaporkan ketidakupayaan untuk mencari pustaka Oracle, walaupun pada hakikatnya fail yang diperlukan terdapat di lokasi yang betul.

Resolusi

  1. Gunakan alat $ORACLE_HOME/bin/relink untuk menjana perpustakaan libclntst.a, sebagai pelanggan Oracle biasanya jangan hantar dengan fail ini. Pustaka statik ini mengandungi simbol yang tiada yang diperlukan untuk pemautan statik.
  2. Kompilasi aplikasi dengan perpustakaan libclntst.a. Sahkan ketiadaan sebarang simbol yang tidak dapat diselesaikan.
  3. Gunakan alat nm untuk mengenal pasti sumber bagi mana-mana simbol yang hilang tertunggak.
  4. Sebagai contoh, dalam kes Oracle 11gR2, arahan kompilasi berikut berjaya menyelesaikan semua kebergantungan:
/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
Salin selepas log masuk

Arahan ini termasuk statik tambahan perpustakaan untuk menyelesaikan kebergantungan, termasuk libippdcmerged.a dan libippsmerged.a.

Ringkasnya, pemautan statik memerlukan penyelesaian manual semua kebergantungan, yang mungkin memerlukan kemasukan perpustakaan tambahan yang biasanya tidak disertakan dalam pemautan dinamik.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memautkan Aplikasi My Go secara Statik dengan Perpustakaan Oracle, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan