Sie versuchen, eine statische Binärdatei zu erstellen, die eine Verbindung zu einer Oracle-Datenbank herstellt, stoßen jedoch auf einen Fehler während der Verknüpfungsphase. Hier ist eine detaillierte Analyse und Lösung für Ihr Problem:
/usr/bin/ld: cannot find -lclntsh
Dieser Fehler weist darauf hin, dass der Compiler die Oracle-Bibliothek libclntsh.a nicht finden kann.
Ihre Konfiguration enthält bereits die dynamische Version der Bibliothek (-L/usr/lib/oracle/12.1/client64/lib -lclntsh) für dynamische Verknüpfungen, aber Sie müssen die statische Version (.a) für statische Verknüpfungen verwenden.
Um eine statische ausführbare CGO-Datei mit Oracle-Bibliotheken zu erstellen, müssen Sie diese befolgen Schritte:
Verwenden Sie das Relink-Tool von Oracle: Verwenden Sie das Tool $ORACLE_HOME/bin/relink, um die statische Bibliothek mit dem Namen libclntst.a:
$ORACLE_HOME/bin/relink all
Verknüpfen Sie Ihre App mit libclntst.a: Versuchen Sie, Ihre Anwendung mit der statischen Bibliothek zu verknüpfen:
CGO_ENABLED=1 go build -work -x -ldflags " -v -linkmode external -extldflags -static" -L/usr/lib/oracle/12.1/client64/lib oracletest.go
Zum Beispiel das Folgende Der Befehl erstellt erfolgreich eine statisch verknüpfte ausführbare Datei auf 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
Erstellen Statisch verknüpfte ausführbare CGO-Dateien mit Oracle-Bibliotheken können aufgrund mehrerer Bibliotheksabhängigkeiten eine Herausforderung darstellen. Wenn Sie die bereitgestellten Lösungen befolgen, können Sie erfolgreich eine statische Binärdatei generieren, die eine Verbindung zu Ihrer Oracle-Datenbank herstellt.
Das obige ist der detaillierte Inhalt vonWie behebt man statische Verknüpfungsfehler beim Herstellen einer Verbindung zu einer Oracle-Datenbank in CGO unter Linux/Ubuntu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!