Ich möchte eine eigenständige Version von 'curl ohne irgendeine Bibliotheksabhängigkeit (sogar libc) für ein eingebettetes System mit einer sehr alten libc-Version erstellen.
Aus dem aktuellen curl github konfiguriere ich die Kompilierung mit diesem Befehl:
%Vor% Dann bekomme ich während der make
-Phase die folgenden Warnungen:
Ich kann fortfahren und die make install
ausführen, um die letzte Binärdatei zu erhalten.
Die Binärdatei hat keine Abhängigkeit:
%Vor%Aber das Binärprogramm funktioniert überhaupt nicht:
%Vor%Haben Sie eine Ahnung von dem Grundproblem?
EDIT 1: GDB-Ausgabe:
%Vor%EDIT 2:
%Vor% Vielleicht kommt das Problem von W
:
W Das Symbol ist ein schwaches Symbol, das nicht speziell als markiert wurde ein schwaches Objektsymbol. Wenn ein schwach definiertes Symbol mit a verknüpft ist normal definiertes Symbol, das normal definierte Symbol wird mit Nein verwendet Error. Wenn ein schwaches undefiniertes Symbol verknüpft ist und das Symbol nicht definiert, wird der Wert des schwachen Symbols ohne Fehler Null.
EDIT 3:
Wenn ich die SSL-Verknüpfung entferne, habe ich die gleiche Warnung für getpwuid
erhalten, aber die Binärdatei funktioniert:
Aber ich muss SSL für die HTTPS-Unterstützung hinzufügen, damit das Problem weiterhin besteht.
EDIT 4:
Das Problem ist direkt mit nss
verknüpft. Eigenartiger Punkt ist, dass ./configure --prefix=/tmp/curl --disable-shared --enable-static-nss LDFLAGS='-static -static-libgcc -Wl,-Bstatic' LIBS='-ls'
eine funktionierende eigenständige ausführbare Datei ohne SSL erzeugt.
Die nss
Probleme sind auf die SSL-Verknüpfung zurückzuführen.
Ziehen Sie die Quellentwicklungsversion von openssl Ссылка und kompilieren Sie sie für die statische Verknüpfung neu (endet mit einem '.a' anstelle eines '.damit'). Dann rebuilt curl und verlinke mit der statischen openssl-Bibliothek, die du erstellt hast.
Sie wissen, dass libssl Ihnen Probleme bereitet, aber es ist vielleicht nicht die einzige Bibliothek. Wenn Sie die nächste Bibliothek finden, die Ihnen Probleme bereitet, tun Sie dasselbe für sie: ziehen Sie die Quellentwicklungsversion und erstellen Sie sie für die statische Verknüpfung neu.
Tags und Links gcc curl ldd segmentation-fault