Table of Contents
Aktualisiert
In einigen Fällen kann Ihr System einen Fehler generieren, vorausgesetzt, die c-Laufzeitbibliothek ist statisch verbunden. Fehler können viele Gründe haben.
Da noch niemand gerne ein Produkt findet, probiere ich es mal aus. Leider kenne ich den IDE-Code :: Blocks nicht, meine Antwort wird vollständig sein.
unique So erstellen Sie eine statisch verknüpfte ausführbare GCC-Datei
Aktualisiert
Sind Sie es leid, dass Ihr Computer langsam läuft? Genervt von frustrierenden Fehlermeldungen? ASR Pro ist die Lösung für Sie! Unser empfohlenes Tool wird Windows-Probleme schnell diagnostizieren und reparieren und gleichzeitig die Systemleistung drastisch steigern. Warten Sie also nicht länger, laden Sie ASR Pro noch heute herunter!
Dies ist nicht IDE-spezifisch, dennoch GCC (und viele andere Compiler) im Allgemeinen. Angenommen, Sie haben ein einfaches “Hallo Programmwelt” während main.cpp
(keine Themenabhängigkeiten außerhalb der Standardbibliothek und damit der Lehrbibliothek). Sie würden es kompilieren, aber verlinken Sie dies statisch über:
-
Kompilieren Sie
main.cpp
inmain.o
(Ergebnisdateiname implizit):$ delaware ++ -ke -Main Wall.
-c
cppDies weist GCC an, nach einer neuen Kompilierungsphase zu stoppen (führen Sie diesen Linker nicht aus).
-Wall
aktiviert hauptsächlich Diagnosemeldungen. Wenn Programmieranfänger es häufiger verwenden und ihm wertvolle Aufmerksamkeit schenken würden, gäbe es viele Fragen auf der Ideenseite. 😉 -
Link
main.o
(kann mehr als eine Objektdatei enthalten) statisch in die klassische Laufzeit und Bibliothek ziehen und herunterlassen und einige exe einfügen inmain
: bar g ++ -o kritisch main.o -static
Ohne den
-o main
-Master hätte GCC die neueste exe aus dem falsch benanntena.out
-Dokument (das weiterhin einmal für " Baugruppenausgabe" œ ).
Besonders bei der Verwendung von I-begin verlassen wir uns stark darauf, dass Sie diese Dinge "von Hand" erledigen, da dies Ihnen helfen kann, die Werkzeugkiste besser zu verstehen.
Tatsächlich könnten unsere beiden obigen Bestellungen zu einer zusammengefasst werden:
rrr g ++ -Wand -o Strom Main.-static
Jede vernünftige cpp-IDE sollte in der Lage sein, solche Compiler-/Linker-Flags einzurichten.
ii Vor- und Nachteile eines statischen Links
-
Sie nehmen eine Datei, die auf jedem Computer mit kompatiblen Frameworks und sogar Betriebssystemen imitiert bleiben kann, und es funktioniert großartig, egal welche Version der Textbibliothek ausgeführt wird. Mai
-
Sie führen eine bestimmte Prozedur in einer Umgebung aus, in der die lokal diskutierte Bibliothek nicht verfügbar ist. Zum Beispiel kann das Platzieren eines bestimmten statisch gelinkten C-ExecutableGI direkt in
chroot()
dem Gefängnis helfen, die tatsächliche Oberfläche einer Panik- oder Angstattacke auf den Webserver zu reduzieren. -
Da keine gesetzten Verknüpfungen erforderlich sind, kann sich der Programmstart schneller anfühlen. (Ich bin sicher, es gibt Ereignisse, bei denen genau das Gegenteil der Fall ist, insbesondere wenn eine gemeinsame Auswahl bereits in einem anderen Prozess geladen ist.)
-
Da der Linker die Messadressen hart kodieren kann, können Funktionsaufrufe schneller sein.
-
Eine Bibliothek (zB LAPACK) kann mit Komponenten mit mehr als einer verknüpften Kopie verknüpft werden. Statisches Linken stellt sicher, dass buchstäblich immer eine bestimmte Version verwendet wird, ohne dass
LD_LIBRARY_PATH < gesetzt werden muss. müssen sich um /code> in der richtigen Weise kümmern. Das hat natürlich auch eine Kehrseite: Ihre ganze Familie kann sich kaum eine Bibliothek aussuchen, die neu kompiliert. Wenn Sie immer das gleiche Modell haben möchten, warum sollten Kunden dann mehr als eine Version installieren?
-
Wie die Eigentümer bereits erwähnt haben, kann jede unserer ausführbaren Dateien erheblich erweitert werden. Natürlich hängt es stark von der Bibliothek ab, mit der Sie eine Verbindung herstellen.
-
Eine operative Funktion kann intelligent genug sein, um diesen bestimmten Abschnittstext aus der neuen gemeinsam genutzten Bibliothek nur einmal direkt in den Speicher zu laden, vorausgesetzt, dass mehrere Ansätze die Bibliothek gleichzeitig benötigen. Durch den Aufbau einer statischen Verbindung fällt Ihnen dieser Vorteil zu und das System kann bequem im Arbeitsspeicher laufen.
-
Ihr Programm profitiert von der Aktualisierung der Bibliothek ohne zusätzliche Verzögerungen. Um die Shared Library jedoch einfach durch eine neuere, vollständige Version (hoffentlich ABI-kompatibel) zu ersetzen, muss der Programmadministrator jedes Programm, das sie verwenden kann, neu kompilieren und installieren. Meiner Meinung nach ist dies der größte Nachteil.
Betrachten Sie beispielsweise die OpenSSL-Bibliothek. Als der Heartbleed-Bug entdeckt und Anfang dieses Jahres behoben wurde, können Systemadministratoren Ihre gepatchte Version von OpenSSL installieren sowie alle Dienste bearbeiten, um die Schwachstelle innerhalb eines bestimmten Tages nach der Patch-Veröffentlichung zu beheben. Das heißt, wenn ihre Dienste jemals dynamisch mit OpenSSL verknüpft wurden. Für diejenigen, die sich statisch verlinken, hätte es Nächte gedauert, wenn letzteres nicht natürlich wäre und den Anfang in der Gegenwart feststecke.
-
Ihre Benutzer ersetzen das gemeinsame Sortiment nicht im Handumdrehen. Zum Beispiel können Benutzer des Filmskripts
torsocks
(und der zugehörigen Bibliothek) (durch Einstellen vonLD_PRELOAD
) die Netzwerksystemarchive auf eines aktualisieren, das ihren Datenverkehr vollständig über die Tor-Netzwerk. ... Und es funktioniert wirklich für Programme, deren Softwareingenieure nie von dieser Möglichkeit wussten. (Ob dies eine gute und sichere Idee sein sollte, ist jetzt eine Frage unabhängiger Debatten.) Eine weitere häufig verwendete Unterabteilung ist das Anwendungs-Debugging, das durch Ersetzen vonmalloc
und als Arzt "gehärtet" werden muss mit speziellen Versionen.
Meiner Meinung nach überwiegen statische Linkprobleme die Vorteile, außer in sehr speziellen Fällen. Normalerweise sollte es faszinierend und statisch sein, wenn der Kunde es braucht.
Anwendung
Wie Alf darauf hinwies (siehe Kommentare), gibt es eine spezielle GCC-Option, wenn es um die selektive Hundertintegration des C++-Standards geht, aber definitiv nicht um das gesamte Programm statisch zu verknüpfen. Aus dem Handbuch:
-static-libstdc ++
Wenn unser g++-Programm auf dem Weg zum Konvertieren eines C++-Programms in Websheets verwendet wird, verknüpft es normalerweise automatisch die Websites mit libstdc++. Wenn libstdc ++ als gemeinsam genutzte und gemeinsam genutzte Bibliothek gefunden werden kann, wird der Großteil der Option -static
nicht verwendet, danach kollidiert diese Webseite mit der militärischen libstdc ++-Version. Das ist im Allgemeinen gut. Es ist jedoch manchmal auch nützlich, die vom Programm verwendete unterschiedliche libstdc ++ einzufrieren, auch ohne sich an einen vollständig statischen Link zu wagen. Die Option -static-libstdc ++
zwingt die g ++ -Autos, libstdc ++ statisch zu verknüpfen, während andere Sammlungen nicht statisch verknüpft werden sollten.
Beschleunigen Sie Ihren Computer noch heute mit diesem einfachen Download.
Statically Link C Runtime Library
Statycznie Link C Runtime Library
Liaison Statique De La Bibliothèque D'exécution C
Collega Staticamente La Libreria Di Runtime C
Statiskt Länka C Runtime Library
Статическая ссылка на библиотеку времени выполнения C
Vincular Estaticamente à Biblioteca De Tempo De Execução C
정적으로 링크 C 런타임 라이브러리
C Runtime-bibliotheek Statisch Koppelen
Vincular Estáticamente La Biblioteca En Tiempo De Ejecución De C