So verwenden Sie den Linux-Befehl ar zum Erstellen statischer Bibliotheken

Inhalt

Shell-Eingabeaufforderung auf einem Linux-Laptop

Verwenden Sie Linux ar Befehl zum Erstellen von Funktionsbibliotheken bei der Entwicklung von Software. Dieses Tutorial zeigt Ihnen, wie Sie eine statische Bibliothek erstellen, modifizieren und in einem Programm verwenden, komplett mit Beispielcode.

das ar Command ist ein echter Veteran, besteht seit 1971. Name ar bezieht sich auf den ursprünglichen Verwendungszweck des Werkzeugs, was war Archivdateien erstellen. Ein Archiv ist eine einzelne Datei, die als Container für andere Dateien fungiert. Manchmal, für viele andere Dateien. Dateien können hinzugefügt werden, löschen oder aus dem Archiv extrahieren. Leute, die nach dieser Art von Funktionalität suchen, wenden sich nicht mehr an ar. Diese Rolle wurde von anderen Versorgungsunternehmen übernommen, wie z tar.

das ar Trotz dieses, der Befehl wird immer noch für einige spezielle Zwecke verwendet. ar verwendet, um statische Bibliotheken zu erstellen. Diese werden in der Softwareentwicklung verwendet. UND ar Es wird auch verwendet, um Paketdateien wie Dateien zu erstellen “.deb” verwendet in der Debian Linux-Distribution und ihren Derivaten, wie Ubuntu.

Wir werden die Schritte überprüfen, die zum Erstellen und Ändern einer statischen Bibliothek erforderlich sind, und zeigen, wie die Bibliothek in einem Programm verwendet wird. Das zu tun, Wir brauchen eine Anforderung, die die statische Bibliothek erfüllen muss. Der Zweck dieser Bibliothek besteht darin, Textzeichenfolgen zu codieren und codierten Text zu decodieren.

Bitte beachte, dass dies ein schneller und schmutziger Hack für Demo-Zwecke ist. Verwenden Sie diese Verschlüsselung nicht für etwas von Wert. Es ist das einfachste der Welt Ersatzverschlüsselung, wo A zu B . wird, Aus B wird C, und so weiter.

VERBUNDEN: So komprimieren und extrahieren Sie Dateien mit dem tar-Befehl in Linux

Die cipher_encode-Funktionen () y cipher_decode ()

Lassen Sie uns an einem Verzeichnis mit dem Namen “Bücherei” und dann erstellen wir ein Unterverzeichnis namens “nachweisen”.

Wir haben zwei Dateien in diesem Verzeichnis. In einer Textdatei namens cipher_encode.c haben wir die cipher_encode() Funktion:

void cipher_encode(Zeichen *text)
{
 zum (int i=0; Text[ich] != 0x0; ich++) {
   Text[ich]++;
 }

} // Ende von cipher_encode

Die jeweiligen cipher_decode() Die Funktion befindet sich in einer Textdatei namens cipher_decode.c:

void cipher_decode(Zeichen *text)
{
 zum (int i=0; Text[ich] != 0x0; ich++) {
   Text[ich]--;
 }

} // Ende von cipher_decode

Die Dateien, die Programmieranweisungen enthalten, werden Quellcodedateien genannt.. Wir werden eine Bibliotheksdatei namens libcipher.a . erstellen. Es enthält die kompilierten Versionen dieser beiden Quellcodedateien. Wir werden auch eine kurze Textdatei namens libcipher.h . erstellen. Dies ist eine Header-Datei, die die Definitionen der beiden Funktionen in unserer neuen Bibliothek enthält.

Jeder, der die Bibliothek und die Header-Datei besitzt, kann die beiden Funktionen in seinen eigenen Programmen verwenden. Sie müssen das Rad nicht neu erfinden und die Funktionen neu schreiben; sie verwenden nur die Exemplare in unserer Bibliothek.

Kompilieren Sie die Dateien cipher_encode.c und cipher_decode.c

Um die Quellcodedateien zu kompilieren, wir werden verwenden gcc, das Standard-GNU-Compiler. das -c (kompilieren, Sünde Link) Option sagt gcc um die Dateien zu kompilieren und dann zu stoppen. Erzeugt eine Zwischendatei für jede Quellcodedatei, die als Objektdatei bezeichnet wird. das gcc Der Linker nimmt im Allgemeinen alle Objektdateien und verknüpft sie, um ein ausführbares Programm zu erstellen. Wir überspringen diesen Schritt mit dem -c Möglichkeit. Wir brauchen nur die Objektdateien.

Lassen Sie uns überprüfen, ob wir die Dateien haben, von denen wir glauben, dass wir sie haben.

ls -l

Die beiden Quellcodedateien sind in diesem Verzeichnis vorhanden. Lass uns benutzen gcc um sie in Objektdateien zu kompilieren.

gcc -c cipher_encode.c
gcc -c cipher_decode.c

Es sollte keinen Ausweg geben gcc wenn alles gut geht.

Dadurch werden zwei Objektdateien mit demselben Namen wie die Quellcodedateien generiert, aber mit Erweiterungen “.Ö”. Dies sind die Dateien, die wir der Bibliotheksdatei hinzufügen müssen.

ls -l

Erstellen der Bibliothek libcipher.a

So erstellen Sie die Bibliotheksdatei, was eigentlich eine Archivdatei ist, wir werden verwenden ar.

Wir verwenden die -c (schaffen) Option zum Erstellen einer Bibliotheksdatei, das -r (hinzufügen mit ersetzen) um die Dateien zum Bibliotheksarchiv hinzuzufügen, und der -s (Index) Option zum Erstellen eines Index der Dateien in der Bibliotheksdatei.

Nennen wir die Bibliotheksdatei libcipher.a. Wir geben diesen Namen in der Befehlszeile an, zusammen mit den Namen der Objektdateien, die wir der Bibliothek hinzufügen werden.

ar -crs libcipher.a cipher_encode.o cipher_decode.o

Wenn wir die Dateien im Verzeichnis auflisten, wir werden sehen, dass wir jetzt eine libcipher.a-Datei haben.

ls -l

Wenn wir die verwenden -t (Tisch) Option mit ar wir können die Module in der Bibliotheksdatei sehen.

ar -t libcipher.a

Erstellen Sie die Header-Datei libcipher.h

Die Datei libcipher.h wird in jedes Programm aufgenommen, das die Bibliothek libcipher.a verwendet.. Die Datei libcipher.h muss die Definition der Funktionen enthalten, die sich in der Bibliothek befinden.

So erstellen Sie die Header-Datei, wir müssen die Funktionsdefinitionen in einem Texteditor wie gedit schreiben. Benennen Sie die Datei "libcipher.h" und speichern Sie sie im selben Verzeichnis wie die Datei libcipher.a.

void cipher_encode(Zeichen *text);
void cipher_decode(Zeichen *text);

Verwenden der Bibliothek libcipher

Der einzig sichere Weg, unsere neue Bibliothek zu testen, besteht darin, ein kleines Programm zu schreiben, um sie zu verwenden.. Entscheiden , wir erstellen ein Verzeichnis namens test.

mkdir-Test

Wir werden die Bibliotheks- und Header-Dateien in das neue Verzeichnis kopieren.

cp libcipher.* ./test

Wir wechseln in das neue Verzeichnis.

CD-Test

Lassen Sie uns überprüfen, ob unsere beiden Dateien hier sind.

ls -l

Wir müssen ein kleines Programm erstellen, das die Bibliothek verwenden kann und zeigen, dass es wie erwartet funktioniert. Schreiben Sie die folgenden Textzeilen in einen Editor. Speichern Sie den Inhalt des Editors in einer Datei mit dem Namen “Test.c” bei nachweisen Verzeichnis.

#enthalten <stdio.h>
#enthalten <stdlib.h>

#enthalten "libcipher.h"

int main(int argc, char *argv[])
{
 Zeichentext[]="How-To Geek liebt Linux";

 legt(Text);

 cipher_encode(Text);
 legt(Text);

 cipher_decode(Text);
 legt(Text);

 Ausfahrt (0);

} // Ende der Hauptsache

Der Ablauf des Programms ist sehr einfach:

  • Enthält die Datei libcipher.h, damit Sie die Definitionen der Bibliotheksfunktionen sehen können.
  • Erstellen Sie eine Zeichenfolge mit dem Namen “Text” und speichert die Wörter “How-To Geek liebt Linux” darin.
  • Drucken Sie diese Zeichenfolge auf dem Bildschirm aus.
  • Ruf an cipher_encode() Funktion zum Codieren der Zeichenfolge, und drucken Sie die codierte Zeichenfolge auf den Bildschirm.
  • Lama cipher_decode() um die Zeichenfolge zu dekodieren und die dekodierte Zeichenfolge auf dem Bildschirm auszugeben.

Um die . zu generieren test Programm, wir müssen das Programm test.c und den Link in der Bibliothek kompilieren. das -o (Ausgang) Option sagt gcc wie man das ausführbare Programm aufruft, das es generiert.

gcc test.c libcipher.a -o test

Und gcc gibt es stillschweigend an die Eingabeaufforderung zurück, alles ist gut. Jetzt testen wir unser Programm. Moment der Wahrheit:

./Prüfung

Und wir sehen die erwartete Leistung. das test Das Programm druckt den Klartext, druckt den verschlüsselten Text und druckt dann den entschlüsselten Text. Sie nutzen die Funktionen unserer neuen Bibliothek. Unsere Bibliothek funktioniert.

Erfolg. Aber, Warum hier aufhören??

Ein weiteres Modul zur Bibliothek hinzufügen

Fügen wir der Bibliothek eine weitere Funktion hinzu. Wir werden eine Funktion hinzufügen, mit der der Programmierer die Version der Bibliothek anzeigen kann, die er verwendet. Wir müssen die neue Funktion erstellen, kompilieren Sie es und fügen Sie die neue Objektdatei der vorhandenen Bibliotheksdatei hinzu.

Schreiben Sie die folgenden Zeilen in einen Editor. Speichern Sie den Inhalt des Editors in einer Datei namens cipher_version.c, bei Bücherei Verzeichnis.

#enthalten <stdio.h>

void cipher_version(Leere)
{
 legt("Anleitung Geek :: SEHR UNSICHERE Verschlüsselungsbibliothek");
 legt("Ausführung 0.0.1 Alpha");

} // Ende von cipher_version

Wir müssen die Definition der neuen Funktion zur Header-Datei libcipher.h hinzufügen. Fügen Sie am Ende dieser Datei eine neue Zeile hinzu, damit es so aussieht:

void cipher_encode(Zeichen *text);
void cipher_decode(Zeichen *text);
void cipher_version(Leere);

Speichern Sie die geänderte Datei libcipher.h.

Wir müssen die Datei cipher_version.c kompilieren, damit wir eine Objektdatei cipher_version.o . haben.

gcc -c cipher_version.c

Dadurch wird eine Datei cipher_version.o . erstellt. Wir können die neue Objektdatei mit dem folgenden Befehl zur Bibliothek libcipher.a hinzufügen. das -v (ausführlich) macht die Option generell stumm ar erzähl uns was du gemacht hast.

ar -rsv libcipher.a cipher_version.o

Die neue Objektdatei wird der Bibliotheksdatei hinzugefügt. ar Druckbestätigung. Die “ein” es bedeutet “Aggregat”.

Wir können die nutzen -t (Tisch) Option, um zu sehen, welche Module sich in der Bibliotheksdatei befinden.

ar -t libcipher.a

Jetzt gibt es drei Module in unserer Bibliotheksdatei. Nutzen wir die neue Funktion.

Verwenden der Funktion cipher_version ().

Lassen Sie uns die obige Bibliothek und Header-Datei aus dem Testverzeichnis entfernen, Kopieren Sie die neuen Dateien und wechseln Sie dann zurück zum Testverzeichnis.

Wir werden frühere Versionen der Dateien löschen.

rm ./test/libcipher.*

Wir kopieren die neuen Versionen in das Testverzeichnis.

cp libcipher.* ./test

Wir wechseln in das Testverzeichnis.

CD-Test

Und jetzt können wir das Test.c Programm ändern, um die neue Bibliotheksfunktion zu verwenden.

Wir müssen dem Testprogramm eine neue Zeile hinzufügen.c die aufruft cipher_version() Funktion. Wir werden dies vor dem ersten platzieren puts(text); Leitung.

#enthalten <stdio.h>
#enthalten <stdlib.h> 

#enthalten "libcipher.h" 

int main(int argc, char *argv[]) 
{
 Zeichentext[]="How-To Geek liebt Linux"; 

 // new line added here
 cipher_version(); 

 legt(Text); 
 
 cipher_encode(Text); 
 legt(Text); 
 
 cipher_decode(Text); 
 legt(Text); 

 Ausfahrt (0); 

} // Ende der Hauptsache

Speichern Sie dies als Test.c. Jetzt können wir es kompilieren und testen, ob die neue Funktion betriebsbereit ist.

gcc test.c libcipher.a -o test

Lassen Sie uns die neue Version von ausführen test:

Die neue Funktion funktioniert. Wir sehen die Version der Bibliothek am Anfang der Ausgabe von test.

Aber es kann ein Hindernis geben.

Ersetzen eines Moduls in der Bibliothek

Dies ist nicht die erste Version der Bibliothek; ist die zweite. Unsere Versionsnummer ist falsch. Die erste Version hatte keine cipher_version() Funktion darin. Dieser tut es. Dann sollte dies die Version sein “0.0.2”. Wir müssen die ersetzen cipher_version() Funktion in der Bibliothek mit einem korrigierten.

Gott sei Dank, ar macht es sehr einfach zu machen.

Entscheiden , Lassen Sie uns die Datei bearbeiten cipher_version.c im Bücherei Verzeichnis. Ändern des Texts “Ausführung 0.0.1 Alpha” ein “Ausführung 0.0.2 Alpha”. Es muss so aussehen:

#enthalten <stdio.h>

void cipher_version(Leere)
{
 legt("Anleitung Geek :: SEHR UNSICHERE Verschlüsselungsbibliothek");  
 legt("Ausführung 0.0.2 Alpha"); 

} // Ende von cipher_version

Speichern Sie diese Datei. Wir müssen es erneut kompilieren, um eine neue Objektdatei cipher_version.o zu erstellen.

gcc -c cipher_version.c

Jetzt werden wir es tun. ersetzen das vorhandene cipher_version Objekt in der Bibliothek mit unserer neu kompilierten Version.

Wir haben die benutzt -r (hinzufügen mit ersetzen) Vor, Gehen Sie folgendermaßen vor, um der Bibliothek neue Module hinzuzufügen. Wenn wir es mit einem Modul verwenden, das bereits in der Bibliothek vorhanden ist, ar wird die alte Version durch die neue ersetzen. das -s Die Option (Index) aktualisiert den Bibliotheksindex und -v (ausführlich) die Option wird ar erzähl uns was du gemacht hast.

ar -rsv libcipher.a cipher_version.o

Diesmal ar meldet, dass es das Modul cipher_version.o ersetzt hat. Die “R” Mittel ersetzt.

Verwenden der Funktion cipher_version () Aktualisiert

Wir sollten unsere modifizierte Bibliothek verwenden und überprüfen, ob sie funktioniert.

Wir werden die Bibliotheksdateien in das Testverzeichnis kopieren.

cp libcipher.* ./test

Wir wechseln in das Testverzeichnis.

cd ./test

Wir müssen unser Testprogramm mit unserer neuen Bibliothek neu kompilieren.

gcc test.c libcipher.a -o test

Und jetzt können wir unser Programm testen.

./Prüfung

Das Ergebnis des Testprogramms entspricht unseren Erwartungen. Die korrekte Versionsnummer wird im Versionsstring angezeigt und die Verschlüsselungs- und Entschlüsselungsroutinen funktionieren.

Module aus einer Bibliothek löschen

Es scheint nach all dem schade zu sein, aber entfernen wir die Datei cipher_version.o aus der Bibliotheksdatei.

Um dies zu tun, wir werden die benutzen -d (löschen) Möglichkeit. Wir werden auch die -v Möglichkeit (ausführlich), so dass ar sagt uns was er getan hat. Wir werden auch die -s (Index) Option zum Aktualisieren des Index in der Bibliotheksdatei.

ar -dsv libcipher.a cipher_version.o

ar meldet, dass Sie das Modul entfernt haben. Die “D” es bedeutet “ENTFERNT”.

Wenn wir fragen ar um die Module in der Bibliotheksdatei aufzulisten, wir werden sehen, dass wir wieder bei zwei Modulen sind.

ar -t libcipher.a

Wenn Sie Module aus Ihrer Bibliothek löschen, Denken Sie daran, Ihre Definition aus der Header-Datei der Bibliothek zu löschen.

Teile deinen Code

Bibliotheken machen Code auf praktische, aber private Weise teilbar. Jeder, dem Sie die Bibliotheksdatei und die Headerdatei überlassen, kann Ihre Bibliothek verwenden, aber dein eigentlicher Quellcode bleibt privat.

setTimeout(Funktion(){
!Funktion(F,B,e,v,n,T,S)
{wenn(f.fbq)Rückkehr;n=f.fbq=Funktion(){n.callMethode?
n.callMethod.apply(n,Argumente):n.queue.push(Argumente)};
wenn(!f._fbq)f._fbq = n;n.drücken=n;n.geladen=!0;n.version=’2.0′;
n.Warteschlange=[];t=b.Element erstellen(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, dokumentieren,'Skript',
„https://connect.facebook.net/en_US/fbevents.js’);
fbq('drin', ‘335401813750447’);
fbq('Spur', 'Seitenansicht');
},3000);

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.