Het Gebruik van Linux ar Opdracht voor het Maken van Statische Bibliotheken

0
298
Fatmawati Achmad Zaenuri/Shutterstock.com

Gebruik het Linux ar opdracht voor het maken van de functie bibliotheken als je de ontwikkeling van software. Deze tutorial zal u tonen hoe te maken van een statische bibliotheek, wijzigen en gebruiken in een programma, compleet met voorbeeld code.

De ar opdracht is een echte veteraan—het is al sinds 1971. De naam ar verwijst naar de oorspronkelijke beoogde gebruik van de tool, die was om bestanden te archiveren. Een archief-bestand is een bestand dat fungeert als container voor andere bestanden. Soms voor vele andere bestanden. Bestanden kunnen worden toegevoegd, verwijderd, of uitgepakt uit het archief. Mensen die op zoek zijn naar een dergelijke functie niet langer beurt aan ar. Die rol is overgenomen door andere hulpprogramma ‘ s, zoals teer.

De ar opdracht wordt nog steeds gebruikt voor een paar gespecialiseerde doeleinden, dat wel. ar wordt gebruikt voor het maken van statische bibliotheken. Deze worden gebruikt in de ontwikkeling van software. En ar ook gebruikt worden om bestanden te verpakken, zoals het “.deb” – bestanden die worden gebruikt in de Debian Linux distributie en zijn derivaten, zoals Ubuntu.

We gaan lopen door de vereiste stappen voor het maken en wijzigen van een statische bibliotheek, en aantonen hoe het gebruik van de bibliotheek in een programma. Om dat te doen moeten we een eis voor de statische bibliotheek te vervullen. Het doel van deze bibliotheek voor het coderen snaren van de tekst en voor het decoderen van gecodeerde tekst.

Let op, dit is een quick and dirty hack voor demonstratie doeleinden. Geen gebruik maken van deze codering voor iets dat is van waarde. Het is ‘ s werelds eenvoudigste substitutie, waarbij A wordt B, B wordt C, enzovoort.

GERELATEERD: Hoe te Comprimeren en Uitpakken van Bestanden Met het tar Commando op een Linux

De cipher_encode() en cipher_decode() Functies

We gaan werken in een map met de naam “bibliotheek” en later maken we een submap genaamd “test”.

We hebben twee bestanden in deze map. In een tekst bestand met de naam cipher_encode.c we hebben de cipher_encode() functie:

void cipher_encode(char *tekst)
{
for (int i=0; tekst[i] != 0x0; i++) {
tekst[i]++;
}

} // einde van cipher_encode

De bijbehorende cipher_decode() functie is in een tekst bestand met de naam cipher_decode.c:

void cipher_decode(char *tekst)
{
for (int i=0; tekst[i] != 0x0; i++) {
tekst[i]–;
}

} // einde van cipher_decode

Bestanden waarin programma-instructies worden genoemd broncode bestanden. We gaan een bibliotheek bestand genaamd libcipher.een. Het bevat de gecompileerde versies van deze twee source code bestanden. We maken ook een korte tekst bestand genaamd libcipher.h. Dit is een header-bestand met de definities van de twee functies in onze nieuwe bibliotheek.

Iedereen met de bibliotheek en het header-bestand in staat zal zijn om de twee functies in hun eigen programma ‘ s. Ze hoeft niet opnieuw het wiel uitvinden en herschrijven van de functies; ze maken gebruik van de exemplaren in onze bibliotheek.

Het samenstellen van de cipher_encode.c en cipher_decode.c-Bestanden

Voor het compileren van de source code bestanden, zullen we gebruik maken van gcc, de standaard GNU compiler. De -c (compileren, geen link) optie vertelt gcc voor het compileren van de bestanden en vervolgens stoppen. Het produceert een tussenpersoon bestand van elk broncode bestand met de naam van een bestand. De gcc linker duurt meestal alle object-bestanden en koppelingen aan elkaar tot een uitvoerbaar programma. We zijn het overslaan van deze stap met de optie-c. We moeten gewoon de object-bestanden.

Laten we eens kijken hebben we de bestanden die we denken dat we doen.

ls -l

De twee source code bestanden in deze directory. Laten we gebruik maken van gcc te compileren naar een object-bestanden.

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

Er mag geen uitvoer van gcc als alles goed gaat.

Dit leidt tot twee object-bestanden met dezelfde naam als de source code bestanden, maar met “.o” extensies. Dit zijn de bestanden die we nodig hebben om toe te voegen aan de bibliotheek-bestand.

ls -l

Het maken van de libcipher.een Bibliotheek

Voor het maken van de bibliotheek bestand—wat is eigenlijk een archief bestand—zullen we gebruik maken van ar.

We zijn met de-c (maken) de optie voor het maken van de bibliotheek-bestand, de -r (toevoegen met vervangen) optie om de bestanden toe te voegen aan de bibliotheek-bestand, en de -s (index) optie voor het maken van een index van de bestanden in de bibliotheek bestand.

We gaan bellen met de bibliotheek bestand libcipher.een. Wij zorgen dat de naam op de commando-regel, samen met de namen van de object-bestanden gaan we aan de bibliotheek toevoegen.

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

Als we de lijst van de bestanden in de directory, we zullen zien, we hebben nu een libcipher.een bestand.

ls -l

Als we gebruik maken van de -t (tabel) optie met ar kunnen we zien dat de modules binnen de bibliotheek-bestand.

ar -t libcipher.een

Het maken van de libcipher.h header-Bestand

De libcipher.h-bestand zullen worden opgenomen in een programma dat gebruikmaakt van de libcipher.een bibliotheek. De libcipher.h-bestand bevat de definitie van de functies die in de bibliotheek.

Voor het maken van de header-bestand, moeten we de functie typen definities in een tekstverwerker, zoals gedit. Geef het bestand de naam “libcipher.h” en sla het op in dezelfde map als de libcipher.een bestand.

void cipher_encode(char *tekst);
void cipher_decode(char *tekst);

Met behulp van de libcipher Bibliotheek

De enige zekere manier om te testen onze nieuwe bibliotheek is het schrijven van een programma om het te gebruiken. Eerst maken we een map met de naam test.

mkdir test

We kopiëren de bibliotheek en de header bestanden in de nieuwe map.

cp libcipher.* ./test

We zullen wijzigen in de nieuwe map.

cd test

Let ‘ s check onze twee bestanden zijn hier.

ls -l

We moeten een klein programma dat kunt gebruik maken van de bibliotheek en bewijzen dat het werkt zoals verwacht. Typ de volgende regels tekst in een teksteditor. Het opslaan van de inhoud van de editor een bestand met de naam “test.c” in de map test.

#include <stdio.h>
#include <stdlib.h>

#include “libcipher.h”

int main(int argc, char *argv[])
{
char tekst[]=”How-To Geek houdt van Linux”;

zet(tekst);

cipher_encode(tekst);
zet(tekst);

cipher_decode(tekst);
zet(tekst);

exit (0);

} // einde van de

De programma flow is heel eenvoudig:

  • Het omvat de libcipher.h-bestand, zodat het kan zien van de bibliotheek-functie definities.
  • Het creëert een string “text” en slaat de woorden “How-To Geek houdt van Linux” in.
  • Het afdrukken die string op het scherm.
  • het roept de cipher_encode() functie voor het coderen van de string, en het drukt de gecodeerde tekenreeks op het scherm.
  • Het roept cipher_decode() voor het decoderen van de string en print u de gedecodeerde string op het scherm.

Voor het genereren van de test programma, moeten we compileren van de test.c-programma en de link in de bibliotheek. De -o (output) optie vertelt gcc wat te noemen het uitvoerbare programma dat het genereert.

gcc-test.c libcipher.a-o test

Als gcc stilte keert u terug naar de opdrachtprompt, alles is goed. Nu laten we het testen van ons programma. Moment van de waarheid:

./test

En we zien dat de verwachte output. Het programma voor het testen van prints in de platte tekst afdrukken van de gecodeerde tekst en drukt de versleutelde tekst. Het is met behulp van de functies binnen onze nieuwe bibliotheek. Onze bibliotheek werkt.

Succes. Maar waarom daar stoppen?

Het toevoegen van een Module aan de Bibliotheek

Laten we het toevoegen van een andere functie naar de bibliotheek. We zullen het toevoegen van een functie die de programmeur kan gebruiken om het scherm de versie van de bibliotheek die ze gebruiken. We zullen moeten maken van de nieuwe functie, compileren, en voeg het nieuwe object bestand om de bestaande bibliotheek-bestand.

Typ de volgende regels in een editor. Het opslaan van de inhoud van de editor een bestand met de naam cipher_version.c, in de bibliotheek map.

#include <stdio.h>

void cipher_version(vervallen)
{
puts(“How-To Geek :: HEEL ONZEKER Cipher Bibliotheek”);
puts(“Versie 0.0.1 Alphan”);

} // einde van cipher_version

Moeten We de definitie van de nieuwe functie aan de libcipher.h header-bestand. Voeg een nieuwe regel toe aan de onderkant van het bestand, zodat het eruit ziet als dit:

void cipher_encode(char *tekst);
void cipher_decode(char *tekst);
void cipher_version(void);

Sla het gewijzigde libcipher.h-bestand.

We moeten compileren van de cipher_version.het c-bestand, zodat we een cipher_version.o object bestand.

gcc -c cipher_version.c

Dit creëert een cipher_version.o bestand. We kunnen toevoegen aan het nieuwe object bestand naar de libcipher.een bibliotheek met de volgende opdracht. De -v (verbose) optie maakt het meestal stil ar vertel ons wat het heeft gedaan.

ar -rsv libcipher.een cipher_version.o

Het nieuwe object bestand wordt toegevoegd aan de bibliotheek-bestand. ar drukt bevestiging. De “a” betekent “toegevoegd.”

We kunnen gebruik maken van de -t (tabel) optie om te zien welke modules zijn binnen de bibliotheek-bestand.

ar -t libcipher.een

Er zijn nu drie de modules in de bibliotheek van het bestand. Laten we gebruik maken van de nieuwe functie.

Met behulp van de cipher_version() Functie.

Laten we verwijderen de oude bibliotheek en het header-bestand in de map test, kopieert de bestanden en vervolgens terug te gaan in de map test.

Verwijderen We de oude versies van de bestanden.

rm ./test/libcipher.*

We kopiëren de nieuwe versies in de map test.

cp libcipher.* ./test

We zullen wijzigen in de map test.

cd test

En nu kunnen wij wijzigen de test.c programma dat gebruik maakt van de nieuwe bibliotheek-functie.

We moeten voeg een nieuwe regel toe aan de test.c programma dat roept cipher_version() functie. Wij plaatsen deze voor de eerste zet(tekst); lijn.

#include <stdio.h>
#include <stdlib.h>

#include “libcipher.h”

int main(int argc, char *argv[])
{
char tekst[]=”How-To Geek houdt van Linux”;

// nieuwe regel toegevoegd hier
cipher_version();

zet(tekst);

cipher_encode(tekst);
zet(tekst);

cipher_decode(tekst);
zet(tekst);

exit (0);

} // einde van de

Opslaan als test.c. We kunnen nu compileren en testen of de nieuwe functie is operationeel.

gcc-test.c libcipher.a-o test

Laten we het uitvoeren van de nieuwe versie van de test:

De nieuwe functie werkt. We zien de versie van de bibliotheek aan het begin van de uitvoer van de test.

Maar misschien is er een probleem.

Het vervangen van een Module In de Bibliotheek

Dit is niet de eerste versie van de bibliotheek; het is de tweede. Onze versie nummer is onjuist. De eerste versie had geen cipher_version() functie in de it. Dit doet. Dus dit moet worden “versie 0.0.2”. We moeten voor het vervangen van de cipher_version() functie in de bibliotheek met een gecorrigeerde één.

Gelukkig, ar maakt dat heel gemakkelijk te doen.

Eerste, laten we bewerken de cipher_version.het c-bestand in de bibliotheek map. De “Versie 0.0.1 Alpha” tekst “Versie 0.0.2 Alpha”. Het moet er zo uitzien:

#include <stdio.h>

void cipher_version(vervallen)
{
puts(“How-To Geek :: HEEL ONZEKER Cipher Bibliotheek”);
puts(“Versie 0.0.2 Alphan”);

} // einde van cipher_version

Sla dit bestand op. We moeten compileren het opnieuw creëren van een nieuwe cipher_version.o object bestand.

gcc -c cipher_version.c

Nu we vervangen de bestaande cipher_version.o object in de library met onze nieuw gecompileerde versie.

Wij hebben de -r (toevoegen met vervangen) optie voor, nieuwe modules toe te voegen aan de bibliotheek. Wanneer we het met een module die al bestaat in de bibliotheek, ar vervangt de oude versie met de nieuwe. De -s (index) optie zal het bijwerken van de bibliotheek index en de -v (verbose) optie zal maken ar vertel ons wat het heeft gedaan.

ar -rsv libcipher.een cipher_version.o

Deze keer ar meldt dat het is vervangen door de cipher_version.o-module. De “r” betekent vervangen.

Het gebruik van de vernieuwde cipher_version() Functie

We moeten gebruik maken van onze aangepaste bibliotheek en controleer of het werkt.

Wij kopiëren de bibliotheek bestanden naar de map test.

cp libcipher.* ./test

We zullen wijzigen in de map test.

de cd ./test

We moeten compileren onze test programma weer met onze nieuwe bibliotheek.

gcc-test.c libcipher.a-o test

En nu kunnen we het testen van onze programma.

./test

De output van de test-programma is wat we hadden verwacht. Het juiste versienummer wordt weergegeven in de tekenreeks voor de versie, en de encryptie en decryptie routines werken.

Het verwijderen van Modules uit een Bibliotheek

Het lijkt een schande, na dat alles, maar we verwijderen de cipher_version.o bestand van de bibliotheek-bestand.

Om dit te doen, zullen we gebruik maken van de -d (wissen) – optie. We zullen ook gebruik van de-v (verbose) optie, zodat ar vertelt ons wat het heeft gedaan. We zullen ook de -s (index) optie voor het bijwerken van de index in de bibliotheek bestand.

ar -dsv libcipher.een cipher_version.o

ar meldt dat het heeft verwijderd van de module. De “d” betekent “verwijderd.”

Als we vragen ar om een lijst van de modules binnen de bibliotheek-bestand, zien we dat we terug naar twee modules.

ar -t libcipher.een

Als je gaat om te verwijderen modules uit uw bibliotheek, vergeet niet om te verwijderen van hun definitie van de bibliotheek header-bestand.

Deel Uw Code

Bibliotheken code speelbaar is in een praktische, maar eigen manier. Iedereen die u aan de bibliotheek bestand en header-bestand te kunnen gebruiken in uw bibliotheek, maar uw broncode blijft privé.

LEES VERDER

  • “Wat Is een Deepfake, en Moet ik me zorgen maken?
  • “Hoe Internet Snelheid Testen In Zijn Werk? (en Hoe Nauwkeurig Zijn Ze?)
  • “Hoe Stream UFC 239 Jon Jones vs. Santos Online
  • “Hoe om te Controleren Uw Wi-Fi-signaalsterkte
  • “Wat Is de “Opwaardering” op een TV, en Hoe Werkt Het?