Comment utiliser la commande Linux ar pour créer des bibliothèques statiques

Contenu

Invite Shell sur un ordinateur portable Linux

Utiliser Linux ar commande pour créer des bibliothèques de fonctions lorsque vous développez un logiciel. Ce tutoriel va vous montrer comment créer une bibliothèque statique, le modifier et l'utiliser dans un programme, complet avec exemple de code.

Les ar Le commandement est un vrai vétéran, existe depuis 1971. Le nom ar fait référence à l'utilisation initiale prévue de l'outil, ce qui était pour créer des fichiers d'archives. Une archive est un fichier unique qui sert de conteneur pour d'autres fichiers. Parfois, pour de nombreux autres fichiers. Des fichiers peuvent être ajoutés, supprimer ou extraire de l'archive. Les personnes à la recherche de ce type de fonctionnalité ne se tournent plus vers ar. Ce rôle a été assumé par d'autres entreprises de services publics telles que tar.

Les ar Malgré cela, la commande est toujours utilisée à des fins spécialisées. ar utilisé pour créer des bibliothèques statiques. Ceux-ci sont utilisés dans le développement de logiciels. ET ar il est également utilisé pour créer des fichiers de package tels que des fichiers “.Cliquez et téléchargez le fichier” utilisé dans la distribution Debian Linux et ses dérivés, comme Ubuntu.

Nous passerons en revue les étapes requises pour créer et modifier une bibliothèque statique et montrerons comment utiliser la bibliothèque dans un programme. Pour faire ça, nous avons besoin d'une exigence pour que la bibliothèque statique réponde. Le but de cette bibliothèque est d'encoder des chaînes de texte et de décoder du texte encodé.

Veuillez noter qu'il s'agit d'un hack rapide et sale à des fins de démonstration. N'utilisez pas ce cryptage pour quoi que ce soit de valeur. C'est le plus simple du monde cryptage de substitution, où A devient B, B devient C, et ainsi de suite.

EN RELATION: Comment compresser et extraire des fichiers à l'aide de la commande tar sous Linux

Les fonctions cipher_encode () y cipher_decode ()

Travaillons sur un répertoire appelé “une bibliothèque” et ensuite nous allons créer un sous-répertoire appelé “test”.

Nous avons deux fichiers dans ce répertoire. Dans un fichier texte appelé cipher_encode.c, nous avons le cipher_encode() fonction:

void cipher_encode(caractère *texte)
{
 pour (entier i=0; texte[je] != 0x0; je++) {
   texte[je]++;
 }

} // fin de cipher_encode

Le respectif cipher_decode() La fonction est dans un fichier texte appelé cipher_decode.c:

void cipher_decode(caractère *texte)
{
 pour (entier i=0; texte[je] != 0x0; je++) {
   texte[je]--;
 }

} // fin de cipher_decode

Les fichiers qui contiennent des instructions de programmation sont appelés fichiers de code source.. Nous allons créer un fichier bibliothèque appelé libcipher.a. Il contiendra les versions compilées de ces deux fichiers de code source. Nous allons également créer un court fichier texte appelé libcipher.h. Ceci est un fichier d'en-tête qui contient les définitions des deux fonctions dans notre nouvelle bibliothèque.

Toute personne disposant de la bibliothèque et du fichier d'en-tête pourra utiliser les deux fonctions dans ses propres programmes. Ils n'ont pas besoin de réinventer la roue et de réécrire les fonctions; ils se contentent d'utiliser les exemplaires de notre bibliothèque.

Compilez les fichiers cipher_encode.c et cipher_decode.c

Pour compiler les fichiers de code source, nous utiliserons gcc, Les compilateur GNU standard. Les -c (compiler, lien de péché) option dit gcc pour compiler les fichiers puis arrêter. Produit un fichier intermédiaire pour chaque fichier de code source appelé fichier objet. Les gcc L'éditeur de liens prend généralement tous les fichiers objets et les lie pour créer un programme exécutable. Nous sautons cette étape en utilisant le -c option. Nous n'avons besoin que des fichiers objets.

Vérifions que nous avons les fichiers que nous pensons avoir.

ls -l

Les deux fichiers de code source sont présents dans ce répertoire. Utilisons gcc pour les compiler dans des fichiers objets.

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

Il ne devrait y avoir aucun moyen de sortir gcc si tout va bien.

Cela génère deux fichiers objet avec le même nom que les fichiers de code source, mais avec des extensions “.O”. Ce sont les fichiers que nous devons ajouter au fichier de bibliothèque.

ls -l

Création de la bibliothèque libcipher.a

Pour créer le fichier de bibliothèque, qui est en fait un fichier d'archive, nous utiliserons ar.

Nous utilisons le -c (créer) option pour créer un fichier de bibliothèque, la -r (ajouter avec remplacer) pour ajouter les fichiers à l'archive de la bibliothèque, et la -s (indice) option pour créer un index des fichiers dans le fichier de bibliothèque.

Appelons le fichier de bibliothèque libcipher.a. Nous fournissons ce nom sur la ligne de commande, ainsi que les noms des fichiers objets que nous allons ajouter à la bibliothèque.

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

Si nous listons les fichiers dans le répertoire, nous verrons que nous avons maintenant un fichier libcipher.a.

ls -l

Si nous utilisons le -t (table) option avec ar nous pouvons voir les modules à l'intérieur du fichier de bibliothèque.

ar -t libcipher.a

Créez le fichier d'en-tête libcipher.h

Le fichier libcipher.h sera inclus dans tout programme utilisant la bibliothèque libcipher.a.. Le fichier libcipher.h doit contenir la définition des fonctions qui sont dans la bibliothèque.

Pour créer le fichier d'en-tête, il faut écrire les définitions des fonctions dans un éditeur de texte comme gedit. Nommez le fichier "libcipher.h" et enregistrez-le dans le même répertoire que le fichier libcipher.a.

void cipher_encode(caractère *texte);
void cipher_decode(caractère *texte);

Utilisation de la bibliothèque libcipher

Le seul moyen sûr de tester notre nouvelle bibliothèque est d'écrire un petit programme pour l'utiliser.. Premier, nous allons créer un répertoire appelé test.

test mkdir

Nous allons copier les fichiers de bibliothèque et d'en-tête dans le nouveau répertoire.

cp libcipher.* ./test

Nous allons passer au nouveau répertoire.

essai de disque

Vérifions que nos deux fichiers sont ici.

ls -l

Nous devons créer un petit programme qui peut utiliser la bibliothèque et démontrer qu'il fonctionne comme prévu. Écrivez les lignes de texte suivantes dans un éditeur. enregistrer le contenu de l’éditeur dans un fichier appelé “test.c” dans le test annuaire.

#comprendre <stdio.h>
#comprendre <stdlib.h>

#comprendre "libcipher.h"

int main(int argc, char *argv[])
{
 texte de caractère[]="How-To Geek aime Linux";

 met(texte);

 chiffre_encode(texte);
 met(texte);

 chiffre_decode(texte);
 met(texte);

 sortir (0);

} // fin du principal

Le déroulement du programme est très simple:

  • Inclut le fichier libcipher.h afin que vous puissiez voir les définitions des fonctions de la bibliothèque.
  • Créer une chaîne appelée “texte” et stocke les mots “How-To Geek aime Linux” dedans.
  • Imprimer cette chaîne sur l'écran.
  • appeler pour cipher_encode() fonction pour coder la chaîne, et imprimer la chaîne encodée à l'écran.
  • Lama cipher_decode() pour décoder la chaîne et imprimer la chaîne décodée à l'écran.

Pour générer le test Programme, il faut compiler le programme test.c et le lien dans la librairie. Les -o (Sortir) option dit gcc comment appeler le programme exécutable qu'il génère.

gcc test.c libcipher.a -o test

Et gcc le renvoie silencieusement à l'invite de commande, Tout est bien. Testons maintenant notre programme. Moment de vérité:

./test

Et nous voyons la sortie attendue. Les test Le programme imprime le texte brut, imprime le texte crypté, puis imprime le texte décrypté. Vous utilisez les fonctions de notre nouvelle bibliothèque. Notre bibliothèque fonctionne.

Succès. Mais, Pourquoi s'arrêter là?

Ajouter un autre module à la bibliothèque

Ajoutons une autre fonction à la bibliothèque. Nous allons ajouter une fonction que le programmeur peut utiliser pour afficher la version de la bibliothèque qu'il utilise. Nous devrons créer la nouvelle fonction, compilez-le et ajoutez le nouveau fichier objet au fichier de bibliothèque existant.

Écrivez les lignes suivantes dans un éditeur. Enregistrez le contenu de l'éditeur dans un fichier appelé cipher_version.c, dans le Une bibliothèque annuaire.

#comprendre <stdio.h>

void cipher_version(annuler)
{
 met("Mode d'emploi Geek :: Bibliothèque de chiffrement TRÈS INSÉCURISÉE");
 met("Version 0.0.1 alpha");

} // fin de cipher_version

Nous devons ajouter la définition de la nouvelle fonction au fichier d'en-tête libcipher.h. Ajouter une nouvelle ligne à la fin de ce fichier, pour que ça ressemble à ça:

void cipher_encode(caractère *texte);
void cipher_decode(caractère *texte);
void cipher_version(annuler);

Enregistrez le fichier libcipher.h modifié.

Nous devons compiler le fichier cipher_version.c pour avoir un fichier objet cipher_version.o.

gcc -c version_cipher.c

Cela crée un fichier cipher_version.o. Nous pouvons ajouter le nouveau fichier objet à la bibliothèque libcipher.a avec la commande suivante. Les -v (détaillé) rend l'option généralement silencieuse ar dis nous ce que tu as fait.

ar -rsv libcipher.a cipher_version.o

Le nouveau fichier objet est ajouté au fichier bibliothèque. ar imprimer la confirmation. La “une” ça veut dire “agrégat”.

Nous pouvons utiliser le -t (table) option pour voir quels modules sont dans le fichier de bibliothèque.

ar -t libcipher.a

Maintenant, il y a trois modules dans notre fichier de bibliothèque. Utilisons la nouvelle fonction.

Utilisation de la fonction cipher_version ().

Supprimons la bibliothèque et le fichier d'en-tête ci-dessus du répertoire de test, copions les nouveaux fichiers, puis revenons au répertoire de test.

Nous supprimerons les versions précédentes des fichiers.

rm ./test/libcipher.*

Nous allons copier les nouvelles versions dans le répertoire de test.

cp libcipher.* ./test

Nous allons passer au répertoire de test.

essai de disque

Et maintenant, nous pouvons modifier le programme test.c pour utiliser la nouvelle fonction de bibliothèque.

Nous devons ajouter une nouvelle ligne au programme de test.c qui appelle cipher_version() fonction. Nous placerons cela avant le premier puts(text); ligne.

#comprendre <stdio.h>
#comprendre <stdlib.h> 

#comprendre "libcipher.h" 

int main(int argc, char *argv[]) 
{
 texte de caractère[]="How-To Geek aime Linux"; 

 // new line added here
 cipher_version(); 

 met(texte); 
 
 chiffre_encode(texte); 
 met(texte); 
 
 chiffre_decode(texte); 
 met(texte); 

 sortir (0); 

} // fin du principal

Enregistrez-le en tant que test.c. Maintenant, nous pouvons le compiler et tester que la nouvelle fonctionnalité est opérationnelle.

gcc test.c libcipher.a -o test

Exécutons la nouvelle version de test:

La nouvelle fonctionnalité fonctionne. Nous pouvons voir la version de la bibliothèque au début de la sortie de test.

Mais il peut y avoir un obstacle.

Remplacement d’un module dans la bibliothèque

ce n’est pas la première version de la bibliothèque; est le deuxième. Notre numéro de version est incorrect. La première version n’avait pas cipher_version() fonction en elle. Celui-ci le fait.. Alors cela devrait être la version “0.0.2”. Nous devons remplacer le cipher_version() dans la bibliothèque avec une fonction corrigée.

Heureusement, ar le rend très facile à faire.

Premier, modifions le fichier cipher_version.c dans le Une bibliothèque annuaire. Modifier le texte “Version 0.0.1 Alpha” une “Version 0.0.2 Alpha”. Il doit ressembler à ceci:

#comprendre <stdio.h>

void cipher_version(annuler)
{
 met("Mode d'emploi Geek :: Bibliothèque de chiffrement TRÈS INSÉCURISÉE");  
 met("Version 0.0.2 alpha"); 

} // fin de cipher_version

Enregistrer ce fichier. Nous devons le compiler à nouveau pour créer un nouveau fichier objet cipher_version.o.

gcc -c version_cipher.c

Maintenant nous allons remplacer l'objet cipher_version.o existant dans la bibliothèque avec notre version nouvellement compilée.

Nous avons utilisé le -r (ajouter avec remplacer) avant, pour ajouter de nouveaux modules à la bibliothèque. Quand on l'utilise avec un module qui existe déjà dans la librairie, ar remplacera l'ancienne version par la nouvelle. Les -s L'option (indice) mettra à jour l'index de la bibliothèque et -v (détaillé) l'option sera ar dis nous ce que tu as fait.

ar -rsv libcipher.a cipher_version.o

Cette fois ar signale qu'il a remplacé le module cipher_version.o. La “r” signifie remplacé.

Utilisation de la fonction cipher_version () mis à jour

Nous devrions utiliser notre bibliothèque modifiée et vérifier qu'elle fonctionne.

Nous allons copier les fichiers de la bibliothèque dans le répertoire de test.

cp libcipher.* ./test

Nous allons passer au répertoire de test.

cd ./test

Nous devons à nouveau compiler notre programme de test avec notre nouvelle bibliothèque.

gcc test.c libcipher.a -o test

Et maintenant nous pouvons tester notre programme.

./test

Le résultat du programme de test est ce que nous attendions. Le numéro de version correct est affiché dans la chaîne de version et les routines de chiffrement et de déchiffrement fonctionnent.

Supprimer des modules d'une bibliothèque

C'est dommage après tout ça, mais supprimons le fichier cipher_version.o du fichier de bibliothèque.

Pour faire ceci, nous utiliserons le -d (effacer) option. Nous utiliserons également le -v option (détaillé), de sorte que ar nous dit ce qu'il a fait. Nous inclurons également le -s (indice) option pour mettre à jour l'index dans le fichier de bibliothèque.

ar -dsv libcipher.a cipher_version.o

ar signale que vous avez supprimé le module. La “ré” ça veut dire “supprimé”.

Si nous demandons ar pour lister les modules dans le fichier de bibliothèque, nous verrons que nous revenons à deux modules.

ar -t libcipher.a

Si vous supprimez des modules de votre bibliothèque, n'oubliez pas de supprimer votre définition du fichier d'en-tête de la bibliothèque.

Partagez votre code

Les bibliothèques rendent le code partageable de manière pratique mais privée. Toute personne à qui vous donnez le fichier de bibliothèque et le fichier d'en-tête peut utiliser votre bibliothèque, mais votre code source actuel reste privé.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.