GNU/Linux >> Linux Esercitazione >  >> Linux

Perché i file .so sono eseguibili?

Sospetto che sia probabilmente solo per ragioni storiche.

La risposta di BlueBomber è probabilmente storicamente corretta, ma in realtà non è necessaria affinché gli oggetti condivisi siano eseguibili.

Sul mio sistema Ubuntu, non lo sono. Dei 30 /lib/*.so* e 600 /usr/lib/*.so* file, solo uno ha i permessi di esecuzione, e questo è probabilmente solo un problema tecnico.

Il permesso di esecuzione consente l'esecuzione di un file tramite uno dei exec*() funzioni; i file di oggetti condivisi contengono codice eseguibile, ma non vengono eseguiti in questo modo.

D'altra parte, su un sistema CentOS 5.7 a cui ho accesso, quei file sono eseguibile; lo stesso vale per un sistema SPARC Solaris 9. (Sarebbe interessante provare a disattivare i permessi eseguibili su alcuni di quei file per vedere se si rompe qualcosa, ma non sono in grado di farlo.)

(Quale distribuzione Linux stai usando?)

AGGIORNAMENTO:

Questa risposta a questa domanda mostra un esempio (HP-UX) di un sistema in cui il bit di esecuzione è effettivamente richiesto. Questo non sembra essere il caso di Linux, dove alcune distribuzioni impostano il bit di esecuzione (probabilmente per inerzia storica) e altre no. O forse alcuni Linux lo richiedono effettivamente.

Un altro punto dati:sul mio sistema Ubuntu, ho appena provato a creare il mio file oggetto condiviso. Il file "libfoo.so" generato è stato creato con i permessi di esecuzione, ma se eseguo manualmente chmod -x it, il programma che lo utilizza funziona ancora.

In ogni caso, impostando il permesso di esecuzione su *.so files è per lo più innocuo (e certamente meno fastidioso rispetto, ad esempio, all'impostazione dell'autorizzazione di esecuzione sui file sorgente).

AGGIORNAMENTO 2:

Come sottolinea fwyzard in un commento, alcuni *.so i file possono essere effettivamente eseguiti. Ad esempio, sul mio sistema attuale, eseguendo /lib/x86_64-linux-gnu/libc-2.27.so stampa le informazioni sulla versione per la libreria GNU C. /lib/x86_64-linux-gnu/libpthread-2.27.so si comporta in modo simile.


Linux
  1. Perché le soluzioni cloud gestite sono sempre più popolari

  2. File .o vs file .a

  3. Trovare file eseguibili usando ls e grep

  4. Perché una cartella deve essere eseguibile?

  5. Perché i file EXE di Windows non funzionano su Linux?

Esegui file binari in Linux

Perché i file non possono essere manipolati da inode?

Perché l'intestazione del programma è eseguibile?

Perché i Makefile in Linux sono così utili?

Dove si trovano i file di configurazione in WSL?

Perché le librerie condivise su Linux sono eseguibili?