Come usare il comando ar di Linux per creare librerie statiche

Contenuti

Prompt della shell su un laptop Linux

Usa Linux ar comando per creare librerie di funzioni durante lo sviluppo di software. Questo tutorial ti mostrerà come creare una libreria statica, modificalo e usalo in un programma, completo di codice di esempio.

il ar Il comando è un vero veterano, esiste da quando 1971. Nome ar si riferisce alla destinazione d'uso originale dello strumento, cosa era per creare file di archivio. Un archivio è un singolo file che funge da contenitore per altri file. Qualche volta, per molti altri file. I file possono essere aggiunti, eliminare o estrarre dall'archivio. Le persone che cercano quel tipo di funzionalità non si rivolgono più a ar. Tale ruolo è stato assunto da altre società di servizi pubblici come tar.

il ar Nonostante questo, il comando è ancora utilizzato per alcuni scopi specializzati. ar usato per creare librerie statiche. Questi sono utilizzati nello sviluppo del software. E ar además se utiliza para crear archivos de paquetes como los archivos “.Clicca e scarica il file” utilizados en la distribución Debian Linux y sus derivados, come Ubuntu.

Esamineremo i passaggi necessari per creare e modificare una libreria statica e dimostreremo come utilizzare la libreria in un programma. Fare quello, abbiamo bisogno di un requisito per la libreria statica da soddisfare. Lo scopo di questa libreria è codificare stringhe di testo e decodificare testo codificato.

Si prega di notare che questo è un trucco veloce e sporco a scopo dimostrativo. Non utilizzare questa crittografia per nulla di valore. È il più semplice del mondo crittografia surrogata, dove A diventa B, B diventa C, e così via.

IMPARENTATO: Come comprimere ed estrarre file usando il comando tar in Linux

Le funzioni cipher_encode () y cifra_decodifica ()

Vamos a trabajar en un directorio llamado “biblioteca” y posteriormente crearemos un subdirectorio llamado “prova”.

Abbiamo due file in questa directory. In un file di testo chiamato cipher_encode.c abbiamo il cipher_encode() funzione:

void cifra_codifica(carattere *testo)
{
 per (int i=0; testo[io] != 0x0; io++) {
   testo[io]++;
 }

} // end of cipher_encode

Il rispettivo cipher_decode() La funzione è in un file di testo chiamato cipher_decode.c:

void cipher_decode(carattere *testo)
{
 per (int i=0; testo[io] != 0x0; io++) {
   testo[io]--;
 }

} // end of cipher_decode

I file che contengono istruzioni di programmazione sono chiamati file di codice sorgente.. Creeremo un file di libreria chiamato libcipher.a. Conterrà le versioni compilate di questi due file di codice sorgente. Creeremo anche un breve file di testo chiamato libcipher.h. Questo è un file di intestazione che contiene le definizioni delle due funzioni nella nostra nuova libreria.

Chiunque disponga della libreria e del file di intestazione sarà in grado di utilizzare le due funzioni nei propri programmi. Non hanno bisogno di reinventare la ruota e riscrivere le funzioni; usano solo le copie nella nostra libreria.

Compila i file cipher_encode.c e cipher_decode.c

Per compilare i file del codice sorgente, noi useremo gcc, il compilatore GNU standard. il -c (compilare, collegamento del peccato) opzione dice gcc per compilare i file e poi fermarsi. Produce un file intermedio per ogni file di codice sorgente chiamato file oggetto. il gcc Il linker generalmente prende tutti i file oggetto e li collega per creare un programma eseguibile. Saltiamo questo passaggio usando il -c opzione. Abbiamo solo bisogno dei file oggetto.

Controlliamo di avere i file che pensiamo di avere.

ls -l

I due file del codice sorgente sono presenti in questa directory. Usiamo gcc per compilarli in file oggetto.

gcc -c codifica_cifra.c
gcc -c cifra_decode.c

Non dovrebbe esserci via d'uscita gcc se tutto va bene.

Questo genera due file oggetto con lo stesso nome dei file del codice sorgente, pero con extensiones “.oh”. Questi sono i file che dobbiamo aggiungere al file della libreria.

ls -l

Creazione della libreria libcipher.a

Per creare il file della libreria, che in realtà è un file di archivio, noi useremo ar.

Stiamo usando il -c (creare) opzione per creare file di libreria, il -r (aggiungi con sostituisci) per aggiungere i file all'archivio della biblioteca, e il -s (indice) opzione per creare un indice dei file all'interno del file della libreria.

Chiamiamo il file della libreria libcipher.a. Forniamo quel nome sulla riga di comando, insieme ai nomi dei file oggetto che andremo ad aggiungere alla libreria.

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

Se elenchiamo i file nella directory, vedremo che ora abbiamo un file libcipher.a.

ls -l

Se usiamo il -t (tavolo) opzione con ar possiamo vedere i moduli all'interno del file della libreria.

ar -t libcipher.a

Crea il file di intestazione libcipher.h

Il file libcipher.h sarà incluso in qualsiasi programma che utilizza la libreria libcipher.a.. Il file libcipher.h deve contenere la definizione delle funzioni che sono nella libreria.

Per creare il file di intestazione, dobbiamo scrivere le definizioni delle funzioni in un editor di testo come gedit. Denominare il file "libcipher.h" e salvarlo nella stessa directory del file libcipher.a.

void cifra_codifica(carattere *testo);
void cipher_decode(carattere *testo);

Utilizzo della libreria libcipher

L'unico modo sicuro per testare la nostra nuova libreria è scrivere un piccolo programma per usarla.. Primo, creeremo una directory chiamata test.

test mkdir

Copiamo la libreria e i file di intestazione nella nuova directory.

cp libcipher.* ./test

Passeremo alla nuova directory.

prova cd

Controlliamo che i nostri due file siano qui.

ls -l

Dobbiamo creare un piccolo programma in grado di utilizzare la libreria e dimostrare che funziona come previsto. Scrivi le seguenti righe di testo in un editor. Guarde el contenido del editor en un archivo llamadotest.c” a prova directory.

#includere <stdio.h>
#includere <stdlib.h>

#includere "libcipher.h"

int main(int argomento, char *argv[])
{
 carattere di testo[]="How-To Geek ama Linux";

 mette(testo);

 cifra_codifica(testo);
 mette(testo);

 cifra_decodifica(testo);
 mette(testo);

 Uscita (0);

} // fine principale

Il flusso del programma è molto semplice:

  • Include il file libcipher.h in modo da poter vedere le definizioni delle funzioni della libreria.
  • Crea una cadena llamada “testo” y almacena las palabras “How-To Geek ama Linux” en ella.
  • Stampa quella stringa sullo schermo.
  • chiama a cipher_encode() funzione per codificare la stringa, e stampa la stringa codificata sullo schermo.
  • Lama cipher_decode() per decodificare la stringa e stampare la stringa decodificata sullo schermo.

Per generare il test Programma, dobbiamo compilare il programma test.c e il link nella libreria. il -o (Uscita) opzione dice gcc come chiamare il programma eseguibile che genera.

gcc test.c libcipher.a -o test

e gcc lo restituisce silenziosamente al prompt dei comandi, va tutto bene. Ora testiamo il nostro programma. Momento della verità:

./test

E vediamo l'output previsto. il test Il programma stampa il testo normale, stampa il testo crittografato e quindi stampa il testo decrittografato. Stai utilizzando le funzioni all'interno della nostra nuova libreria. La nostra biblioteca sta funzionando.

Successo. Ma, Perché fermarsi qui??

Aggiungi un altro modulo alla libreria

Aggiungiamo un'altra funzione alla libreria. Aggiungeremo una funzione che il programmatore può utilizzare per visualizzare la versione della libreria che sta utilizzando. Dovremo creare la nuova funzione, compilalo e aggiungi il nuovo file oggetto al file della libreria esistente.

Scrivi le seguenti righe in un editor. Salva il contenuto dell'editor in un file chiamato cipher_version.c, a Biblioteca directory.

#includere <stdio.h>

void cipher_version(vuoto)
{
 mette("How-To Geek :: Libreria di cifratura MOLTO INSICURA");
 mette("Versione 0.0.1 alfa");

} // fine della versione_cipher

Dobbiamo aggiungere la definizione della nuova funzione al file di intestazione libcipher.h. Aggiungi una nuova riga alla fine di quel file, per farlo sembrare così:

void cifra_codifica(carattere *testo);
void cipher_decode(carattere *testo);
void cipher_version(vuoto);

Salva il file libcipher.h modificato.

Dobbiamo compilare il file cipher_version.c in modo da avere un file oggetto cipher_version.o.

gcc -c versione_cipher.c

Questo crea un file cipher_version.o. Possiamo aggiungere il nuovo file oggetto alla libreria libcipher.a con il seguente comando. il -v (dettagliato) rende l'opzione generalmente silenziosa ar dicci cosa hai fatto.

ar -rsv libcipher.a cipher_version.o

Il nuovo file oggetto viene aggiunto al file della libreria. ar stampa conferma. Il “un” significa “aggregato”.

Possiamo usare il -t (tavolo) opzione per vedere quali moduli sono all'interno del file della libreria.

ar -t libcipher.a

Ora ci sono tre moduli all'interno del nostro file di libreria. Utilizziamo la nuova funzione.

Utilizzo della funzione cipher_version ().

Rimuoviamo la libreria e il file di intestazione di cui sopra dalla directory di test, copiamo i nuovi file e poi torniamo alla directory di test.

Rimuoveremo le versioni precedenti dei file.

rm ./test/libcipher.*

Copiamo le nuove versioni nella directory di test.

cp libcipher.* ./test

Passeremo alla directory di test.

prova cd

E ora possiamo modificare il programma test.c per utilizzare la nuova funzione di libreria.

Necesitamos agregar una nueva línea al programa test.c que llama cipher_version() funzione. Colocaremos esto antes del primero puts(text); linea.

#includere <stdio.h>
#includere <stdlib.h> 

#includere "libcipher.h" 

int main(int argomento, char *argv[]) 
{
 carattere di testo[]="How-To Geek ama Linux"; 

 // new line added here
 cipher_version(); 

 mette(testo); 
 
 cifra_codifica(testo); 
 mette(testo); 
 
 cifra_decodifica(testo); 
 mette(testo); 

 Uscita (0); 

} // fine principale

Guarde esto como test.c. Ahora podemos compilarlo y probar que la nueva función está operativa.

gcc test.c libcipher.a -o test

Ejecutemos la versión nueva de test:

La nueva función está funcionando. Podemos ver la versión de la biblioteca al comienzo de la salida de test.

Pero puede haber un obstáculo.

Reemplazo de un módulo en la biblioteca

Esta no es la primera versión de la biblioteca; es el segundo. Nuestro número de versión es incorrecto. La primera versión no tenía cipher_version() función en él. Este lo hace. Entonces esta debería ser la versión “0.0.2”. Necesitamos reemplazar el cipher_version() función en la biblioteca con una corregida.

Agradecidamente, ar hace que sea muy fácil de hacer.

Primo, editemos el archivo cipher_version.c en el Biblioteca directory. Cambie el texto “Versione 0.0.1 Alfa” un “Versione 0.0.2 Alfa”. Debe tener un aspecto como este:

#includere <stdio.h>

void cipher_version(vuoto)
{
 mette("How-To Geek :: Libreria di cifratura MOLTO INSICURA");  
 mette("Versione 0.0.2 alfa"); 

} // fine della versione_cipher

Salva questo file. Necesitamos compilarlo nuevamente para crear un nuevo archivo de objeto cipher_version.o.

gcc -c versione_cipher.c

Ahora lo haremos sostituire l'oggetto cipher_version.o esistente nella libreria con la nostra versione appena compilata.

Abbiamo usato il -r (aggiungi con sostituisci) prima, per aggiungere nuovi moduli alla libreria. Quando lo usiamo con un modulo che esiste già nella libreria, ar sostituirà la vecchia versione con quella nuova. il -s L'opzione (indice) aggiornerà l'indice della libreria e -v (dettagliato) l'opzione sarà ar dicci cosa hai fatto.

ar -rsv libcipher.a cipher_version.o

Questa volta ar segnala che ha sostituito il modulo cipher_version.o. Il “R” significa reemplazado.

Utilizzo della funzione cipher_version () aggiornato

Dovremmo usare la nostra libreria modificata e verificare che funzioni.

Copiamo i file della libreria nella directory di test.

cp libcipher.* ./test

Passeremo alla directory di test.

cd ./test

Dobbiamo compilare nuovamente il nostro programma di test con la nostra nuova libreria.

gcc test.c libcipher.a -o test

E ora possiamo testare il nostro programma.

./test

Il risultato del programma di test è quello che ci aspettavamo. Il numero di versione corretto viene visualizzato nella stringa della versione e le routine di crittografia e decrittografia funzionano.

Eliminare moduli da una libreria

Sembra un peccato dopo tutto questo, ma rimuoviamo il file cipher_version.o dal file della libreria.

Per fare questo, useremo il -d (Elimina) opzione. Useremo anche il -v opzione (dettagliato), affinché ar ci dice cosa ha fatto. Includeremo anche il -s (indice) opzione per aggiornare l'indice nel file della libreria.

ar -dsv libcipher.a cipher_version.o

ar segnala che hai rimosso il modulo. Il “D” significa “RIMOSSO”.

Se chiediamo ar per elencare i moduli all'interno del file della libreria, vedremo che siamo tornati a due moduli.

ar -t libcipher.a

Se stai eliminando moduli dalla tua libreria, ricordati di eliminare la tua definizione dal file di intestazione della libreria.

Condividi il tuo codice

Le biblioteche rendono il codice condivisibile in modo pratico ma privato. Chiunque a cui dai il file della libreria e il file di intestazione può usare la tua libreria, ma il tuo codice sorgente attuale rimane privato.

impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.