Heim >Backend-Entwicklung >Golang >Wie verknüpfe ich eine ausführbare Go-CGO-Datei statisch mit Oracle-Bibliotheken unter Linux?
Problemstellung:
Erstellen eines einfachen Go Die Snippet-Schnittstelle mit einer Oracle-Datenbank schlägt beim statischen Kompilieren mit der fehl Befehl:
CGO_ENABLED=1 go build -work -x -ldflags "-v -linkmode external -extldflags -static" ${MAIN_SRC}
Der Kompilierungsfehler zeigt an, dass die Oracle-Bibliothek -lclntsh nicht gefunden werden kann. Trotz Versuchen, Umgebungsvariablen festzulegen und zusätzliche Dateien aus dem Oracle-Datenbankpaket zu installieren, schlägt die statische Kompilierung immer noch fehl.
Lösung:
Generieren Sie die statische Bibliothek:
Oracle wird normalerweise nicht mit der statischen Bibliothek libclntst.a ausgeliefert. Um es zu generieren, führen Sie den folgenden Befehl aus:
$ORACLE_HOME/bin/genclntst
Verknüpfen Sie die Anwendung:
Verknüpfen Sie Ihre Anwendung mit der generierten statischen Bibliothek:
CGO_ENABLED=1 go build -work -x -ldflags "-v -linkmode external -extldflags -static -L/usr/lib/oracle/12.1/client64/lib -lclntsh -lclntst" ${MAIN_SRC}
Behandeln Sie fehlende Symbole (Optional):
Wenn noch Symbole fehlen, verwenden Sie das nm-Tool, um diese zu identifizieren. Fügen Sie dann nach Bedarf weitere statische Bibliotheken hinzu, um die Abhängigkeiten aufzulösen.
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWie verknüpfe ich eine ausführbare Go-CGO-Datei statisch mit Oracle-Bibliotheken unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!