Qual è la differenza tra un file binario e una libreria?


11

Sto cercando di capire lo standard della gerarchia dei filesystem. Ho cercato sia i binari che le librerie, e come lo capisco attualmente:

i binari sono file di codice leggibile dal computer in formato binario, che controllano direttamente la CPU e il processore con i bit.

le librerie sono funzioni utilizzabili da vari programmi, per comodità - come quando si richiede un modulo in Javascript di PHP.

Questa comprensione è corretta? Se lo è, perché separiamo ancora librerie e binari? Alcune librerie sono binarie, giusto? E alcuni binari (cat, less, date, rm, cp, ecc.) Vengono usati e riutilizzati come se fossero librerie ... Qualcuno può aiutare a spiegare la differenza e aiutarmi a trovare definizioni migliori per queste due parole? Grazie.

Risposte:


10

La tua comprensione è per lo più corretta, ma ci sono un paio di cose extra da considerare:

  1. "binario" si riferisce a qualcosa che non è leggibile dall'uomo. Questo di solito si riferisce al codice macchina, ma molti altri file sono anche file binari in questo senso, con la maggior parte dei formati multimediali che ne sono un buon esempio. L'FHS ha tuttavia un uso più specifico per il termine.
  2. Le librerie possono essere in codice binario. In effetti, la maggior parte delle cose in /libsaranno librerie compilate in codice macchina.
  3. Mentre cose come catvengono usate negli script di shell come le chiamate al codice nelle librerie, non sono librerie in senso FHS perché possono essere eseguite da sole.

Come risultato di questi punti, la terminologia più comune tra le persone che non scrivono documenti standard è:

  • File oggetto: si tratta di un codice macchina compilato in modo nativo, ma potrebbe anche non essere eseguito o richiamabile. Di solito hanno .oun'estensione a meno che non rientrino in una delle altre categorie e non sono quasi mai visti sulla maggior parte dei sistemi, tranne quando si creano software. Li ho elencati qui perché sono importanti per capire alcune cose di seguito.

  • File eseguibili: sono file costituiti principalmente da codice autonomo che può essere eseguito direttamente. Possono essere file oggetto appositamente formattati che possono essere caricati direttamente dal kernel (cose come cat, bashe pythonsono tutti questo tipo di eseguibile), oppure sono interpretati da un programma intermedio che è esso stesso un eseguibile (Minecraft pydoc, e cowsaysono tutti esempi di questo tipo di eseguibile). Gli eseguibili del primo tipo non hanno quasi mai un'estensione di file sui sistemi UNIX, mentre gli eseguibili del secondo tipo possono o meno. Questo è ciò che FHS definisce "binari". Possono essere eseguiti da altri eseguibili, ma richiedono di chiamare funzioni speciali per invocarli ( fork()e exec()in C e C ++, cose fuori dalsubprocess modulo in Python, ecc.) ed eseguito come processo separato.

  • Librerie: sono file che contengono codice riutilizzabile che può essere invocato da un'altra libreria o da un eseguibile. Il codice nelle librerie viene invocato (principalmente) direttamente da un altro codice una volta caricata la libreria (indicata come "collegamento" quando si parla di codice compilato) e viene eseguita nello stesso processo del codice che lo chiama. Esistono tre tipi generici di librerie:

    1. Librerie statiche: queste sono le varietà originali. Sono costituiti da un file di archivio (di solito in formato AR) con al suo interno un gran numero di file oggetto, uno per ciascuna funzione della libreria. I file oggetto vengono collegati all'eseguibile che li utilizza, quindi un eseguibile che utilizza solo librerie statiche è essenzialmente indipendente al 100% da qualsiasi altro codice. Sui sistemi UNIX, in genere hanno .aun'estensione. Il concetto di librerie statiche non esiste realmente al di fuori dei linguaggi di programmazione compilati.
    2. Librerie dinamiche: questi sono i tipi più comuni di librerie utilizzate oggi. Una libreria dinamica è un file oggetto speciale, in genere con .soun'estensione su UNIX ( .dllè lo standard su Windows), che viene caricato in fase di esecuzione dagli eseguibili che lo utilizzano. La maggior parte di ciò che troverai nei /libsistemi di produzione sono librerie dinamiche.
    3. Moduli: questo è l'equivalente di una libreria dinamica per un linguaggio interpretato. La gestione è leggermente diversa rispetto a quella di un linguaggio compilato e, diversamente da un linguaggio compilato, è possibile che un file sia sia un modulo che un eseguibile (vedere http.serverun esempio nella libreria standard di Python).

Da non dimenticare i file di script, che sono un caso speciale di eseguibili, poiché dipendono da un eseguibile binario ( bash, python) da eseguire. Inoltre, gli script in /libpossono essere utilizzati da altri script; confrontare i moduli Python.
Murphy,

1
Ciò rientra . Tow of the examples I listed for that (nell '"interpretato da un programma intermedio pydoc" e cowsay) sono gli script.
Austin Hemmelgarn,

Chiarimento su # 3 - i moduli sono bit caricabili di codice utilizzati per estendere la funzionalità. I moduli Apache / php sono un buon esempio per la tua parte di script interpretati, ma contano anche i moduli del kernel ... Aggiungerei anche un punto per coprire i linguaggi interpretati per lo più umani leggibili come gli script per le varie shell, php, perl, ecc. per FHS andrebbero in una directory / bin o / sbin poiché sono programmi eseguibili
ivanivan,

I moduli come estensioni sono più spesso chiamati plugin. La scelta di denominazione di Apache si basava sul vecchio standard UNIX per la chiamata dei moduli dei driver del kernel e che ora è diventato una terminologia comune con i server Web (a causa del marketing), ma questo è un caso strano rispetto alla maggior parte degli altri software, che usa universalmente entrambi i plugin "o" estensione "quando ci si riferisce a questo.
Austin Hemmelgarn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.