Versuch, eine statische ausführbare CGO-Datei mit Oracle-Bibliotheken unter Linux/Ubuntu zu erstellen: Unerwarteter Fehler
Problem:
Erstellen einer Eine statisch verknüpfte ausführbare Datei mit CGO- und Oracle-Bibliotheken unter Linux/Ubuntu führt zu einem Fehler während des Erstellungsprozesses, insbesondere zu einem Fehlschlagen Finden Sie die Oracle-Bibliothek -lclntsh.
Lösung:
-
Generieren Sie die statische Bibliothek (libclntst.a):
a . Installieren Sie das komplette Oracle-Datenbankpaket, falls noch nicht geschehen.
b. Führen Sie $ORACLE_HOME/bin/genclntst aus, um die fehlende statische Bibliothek libclntst12.a zu generieren.
-
Link zur generierten Bibliothek:
a. Ändern Sie Ihren Build-Befehl so, dass er die generierte Bibliothek libclntst12.a.
b einschließt. Beispiel: go build -work -x -ldflags " -v -linkmode external -extldflags -static -L/usr/lib/oracle/12.1/client64/lib -lclntst12" ${MAIN_SRC}
-
Behandeln Sie fehlende Symbole (falls vorhanden):
a. Verwenden Sie ldd, um in der statisch verknüpften ausführbaren Datei nach unaufgelösten Symbolen zu suchen.
b. Verwenden Sie nm, um die Quelle fehlender Symbole in den Oracle-Bibliotheken zu finden.
c. Verknüpfen Sie mit zusätzlichen Bibliotheken, um fehlende Symbole aufzulösen.
-
Zusätzliche Hinweise:
a. Für die statische Verknüpfung müssen alle Abhängigkeiten manuell aufgelöst werden.
b. Für ältere Oracle-Versionen sind möglicherweise zusätzliche statische Bibliotheken aus der ICC-Laufzeitumgebung erforderlich.
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine statische ausführbare CGO-Datei mit Oracle-Bibliotheken unter Linux/Ubuntu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!