Wie können statische Verknüpfungsfehler mit Oracle-Bibliotheken in CGO-Anwendungen behoben werden?

Patricia Arquette
Freigeben: 2024-11-20 22:01:13
Original
726 Leute haben es durchsucht

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

Behebung eines statischen Oracle-Bibliotheksproblems für die ausführbare CGO-Datei

Problemübersicht:

Beim Kompilieren eines Bei einer Go-Anwendung mit aktiviertem CGO und Oracle-Bibliotheken treten beim statischen Link Fehler auf. Insbesondere kann der GCC-Linker die erforderliche Oracle-Bibliothek libclntsh nicht finden. Obwohl beim Kompilieren der Bibliothekspfad angegeben wurde, besteht das Problem weiterhin.

Lösung:

Folgen Sie diesen Schritten, um das Problem zu beheben:

  1. Libclntst-Bibliothek generieren:Führen Sie das genclntst-Tool aus, das sich im bin-Verzeichnis von Oracle befindet, um eine statische Version von libclntst zu erstellen: $ORACLE_HOME/bin/genclntst.
  2. Link zur generierten Bibliothek: Kompilieren Sie die Anwendung neu und verknüpfen Sie sie mit der neu generierten libclntst-Bibliothek.
  3. Fehlende Symbole identifizieren: Verwenden Sie das nm-Tool, um die Linkerfehler zu analysieren und fehlende Symbole zu identifizieren.
  4. Verbleibende Symbole auflösen: In einigen Fällen können zusätzliche statische Bibliotheken erforderlich sein, um die fehlenden Symbole aufzulösen. Bei älteren Oracle-Versionen können diese ICC-Laufzeitbibliotheken umfassen.

Beispiel:

Für 11gR2 löst der folgende Befehl das Problem erfolgreich:

/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
Nach dem Login kopieren

Denken Sie daran, dass beim statischen Verknüpfen Abhängigkeiten manuell aufgelöst werden müssen. In diesem Beispiel hängt libclntst11.a von libippdcmerged.a und libippsmerged.a ab.

Das obige ist der detaillierte Inhalt vonWie können statische Verknüpfungsfehler mit Oracle-Bibliotheken in CGO-Anwendungen behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage