Torna indietro   Hardware Upgrade Forum > Software > Linux, Unix, OS alternativi

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-03-2008, 11:31   #1
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Dubbio su librerie dinamiche

Se eseguo il comando ldd nano ottengo la lista delle librerie utilizzate dal programma nano.
linux-gate.so.1 => (0xffffe000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7e9d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d53000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d4e000)

Se nel sistema è presente libncursesw.so.6 anzichè libncursesw.so.5 nano funziona lo stesso? E' possibile creare un pacchetto contenente tutte le librerie richieste da un programma nella versione esatta richiesta e installare il tutto in una cartella senza casini? Volevo provare qualcosa del genere per un programmino realizzato da me.
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 11:40   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
Se nel sistema è presente libncursesw.so.6 anzichè libncursesw.so.5 nano funziona lo stesso?
Dipende, molte librerie sono retrocompatibili. Mi sembra che con le ncurses non ci siano problemi. Probabilmente però devi creare il symlink libncursesw.so.5 manualmente.

Quote:
E' possibile creare un pacchetto contenente tutte le librerie richieste da un programma nella versione esatta richiesta e installare il tutto in una cartella senza casini?
Sì ci sono tecniche per forzare il programma a usare quelle specifiche librerie.
Oppure, puoi compilare il programma con le librerie statiche.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 11:53   #3
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Grazie della disponibilità! Io pensavo di creare una cartella con tutte le librerie richieste dal programma e l'esegubile e poi modificare LD_LIBRARY_PATH per fare in modo che vada a cercare le librerie anche in quella cartella.
Supponi che io tenga solo l'esegubile nella cartella, lo lancio e lamenta la mancanza di varie librerie, se aggiungo una a una le librerie che non trova riesco a far funzionare il tutto senza problemi ma se invece copio tutte le librerie che servono (comprese quelle che esistono anche in /usr/lib o in altre cartelle di sistema) allora il programma va in segmentation fault e vanno in segmentation fault anche ls e altri comandi se li eseguo.
Nota che il programma è stato originariamente compilato in un'altra macchina e tutte queste librerie di cui ti parlo le ho prese una a una controllando l'output di ld.
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 12:02   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
No non sovrascrivere librerie di una versione differente nelle directory di sistema. Usa LD_LIBRARY_PATH, LD_PRELOAD, "-Wl,--rpath", -static...le soluzioni non mancano di certo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 12:04   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
e inoltre hai fatto un altro errore grave...non bisogna MAI sovrascrivere le librerie in uso! Devi cancellare la vecchia libreria (è ammesso anche se è in uso, l'inode non viene distrutto), e creare la libreria nuova.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 12:18   #6
gurutech
Senior Member
 
L'Avatar di gurutech
 
Iscritto dal: Jun 2000
Città: S.Giuliano (MI)
Messaggi: 1047
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
Grazie della disponibilità! Io pensavo di creare una cartella con tutte le librerie richieste dal programma e l'esegubile e poi modificare LD_LIBRARY_PATH per fare in modo che vada a cercare le librerie anche in quella cartella.
Supponi che io tenga solo l'esegubile nella cartella, lo lancio e lamenta la mancanza di varie librerie, se aggiungo una a una le librerie che non trova riesco a far funzionare il tutto senza problemi ma se invece copio tutte le librerie che servono (comprese quelle che esistono anche in /usr/lib o in altre cartelle di sistema) allora il programma va in segmentation fault e vanno in segmentation fault anche ls e altri comandi se li eseguo.
Nota che il programma è stato originariamente compilato in un'altra macchina e tutte queste librerie di cui ti parlo le ho prese una a una controllando l'output di ld.
ciao,
la tecnica che dici funziona quasi sempre, io l'ho usata diverse volte. Stai solo attento a non sovrascrivere pezzi di sistema. In genere non e' una buona idea ricopiare pezzi di libc da altre parti, cerca di capire l'insieme minimo di librerie senza le quali non parte. mklibs http://packages.debian.org/unstable/devel/mklibs puo' aiutarti in questo.


Esempio: gnudoku per Debian Sarge
http://icculus.org/~jcspray/GNUDoku/
__________________
“No te tomes tan en serio la vida, al fin y al cabo no saldrás vivo de ella”
gurutech è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 12:20   #7
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Come temevo non sono riuscito a spiegarmi bene.
Allora ho una macchina A in cui compilo un programma che dipende da N librerie.

Ora voglio che il programma giri sulla macchina B. Nella macchina B creo una cartella PROVA con l'esegubile preso dalla macchina A. Se lo lancio naturalmente non funziona perchè non trova le librerie.
Provo ad aggiungere la cartella PROVA a LD_LIBRARY_PATH e aggiungo nella cartella PROVA una a una tutte le librerie che il programma non trova (librerie prese dalla macchina A), allora il programma funziona.

Il programma non funziona se invece nella cartella PROVA aggiungo tutte le librerie segnalate da ldd. In questo caso il programma va in segmentation fault così come tutti i comandi della shell.

In pratica se nella cartella PROVA copio solo le librerie che mancano nella macchina A il programma funziona, se invece ci metto tutte le librerie che segnala ldd (e quindi qualcuna magari è contemporaneamente presente in /usr/lib e in PROVA), in questo caso ho i segmentation fault.
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 12:26   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
Il programma non funziona se invece nella cartella PROVA aggiungo tutte le librerie segnalate da ldd. In questo caso il programma va in segmentation fault così come tutti i comandi della shell.
Comprese le librerie di sistema come le libc? Sì può capitare.
Se vuoi portarti dietro anche le libc serve un'altra variabile di ambiente, per specificare l'interpreter ld-linux.so corretto. Altrimenti di default viene usato quello in /lib, indipendentemente da LD_LIBRARY_PATH.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 14:15   #9
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Avevo copiato tutte le librerie ad eccezione di linux-gate.so.1 (che non esiste realmente come file o sbaglio?) e ld-linux.so.2....
Copio nella cartella PROVA anche ld-linux.so.2 e cambio la variabile d'ambiente che mi hai detto affinchè usi il file ld-linux.so fornito da me?
Come si chiama questa variabile d'ambiente?
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 14:35   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Non mi ricordo...

Puoi comunque invocare l'interpreter direttamente (non è una libreria qualsiasi!).
Codice:
/path/di/ld-linux.so.2 --library-path <path librerie> <path eseguibile> <parametri eseguibile>
Ad es:
./ld-linux.so.2 --library-path ./ ./myprog [args...]

Però scusa se mi ripeto -- se senti la necessità di portarti dietro tutte le librerie, perché non compili semplicemente staticamente?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 20-03-2008 alle 14:44.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 14:58   #11
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Penso che proverò a compilare staticamente ma dimmi non è sconveniente?
Non dico per la dimensione del pacchetto perchè tanto le librerie me le devo portare dietro comunque o come .so o compilate staticamente, ma per l'occupazione di memoria non è un problema? Insomma col metodo a cui stavo pensando se per caso è presente la versione esatta già in memoria non dovrebbe caricarla due volte, mentre invece se compilo staticamente si o sbaglio?
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 15:54   #12
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
Penso che proverò a compilare staticamente ma dimmi non è sconveniente?
Non dico per la dimensione del pacchetto perchè tanto le librerie me le devo portare dietro comunque o come .so o compilate staticamente, ma per l'occupazione di memoria non è un problema? Insomma col metodo a cui stavo pensando se per caso è presente la versione esatta già in memoria non dovrebbe caricarla due volte, mentre invece se compilo staticamente si o sbaglio?
Ne avessi azzeccata una
L'_unico_ caso in cui il footprint può essere (globalmente) minore è se la libreria è condivisa con altri programmi diversi dal tuo. In soldoni, se stai usando le librerie native del s/o. E non perché il tuo programma occupa meno memoria, ma perché condivide del codice con altri programmi. Se ti porti dietro le tue librerie e le usi, non c'è differenza con una compilazione statica.

Se compili un eseguibile statico e lo strippi, vedrai che la sua dimensione è minore (a volte di molto!) dell'eseguibile dinamico + librerie.
L'occupazione di memoria non cambia: vanno in memoria solo le pagine necessarie all'esecuzione, indipendentemente se stanno nell'eseguibile o in qualche libreria.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 16:19   #13
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Ne avessi azzeccata una
L'_unico_ caso in cui il footprint può essere (globalmente) minore è se la libreria è condivisa con altri programmi diversi dal tuo. In soldoni, se stai usando le librerie native del s/o. E non perché il tuo programma occupa meno memoria, ma perché condivide del codice con altri programmi.
Se ti porti dietro le tue librerie e le usi, non c'è differenza con una compilazione statica.
Ma non è quello che ho detto???!!
Quote:
Se compili un eseguibile statico e lo strippi, vedrai che la sua dimensione è minore (a volte di molto!) dell'eseguibile dinamico + librerie.
Non ne avevo idea!
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 20-03-2008, 20:46   #14
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Sabonis Guarda i messaggi
Non ne avevo idea!
Un archivio statico .a (quello che viene linkato quando indichi -static) non è altro che un insieme di file, generalmente file oggetto .o (prova ad aprirne uno con ark!)
Una libreria .so ovviamente contiene tutti gli oggetti, mentre quando fai il link statico vengono inclusi nell'eseguibile solo i .o necessari a risolvere i simboli richiesti; gli altri .o vengono scartati.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2008, 14:26   #15
Sabonis
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 82
Ho notato che su due distro diverse l'output di ldd cambia..da cosa può dipendere?
Sabonis è offline   Rispondi citando il messaggio o parte di esso
Old 21-03-2008, 20:09   #16
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
ldd mostra anche le dipendenze delle librerie usate dal programma.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Novità dalle analisi dell'asteroi...
La PS6 sarà più potente del previsto: ec...
Sony svela Xperia 10 VII: è il nu...
Amazon Weekend da urlo: iPhone 16 a prez...
Spotify diffida ReVanced: chiesta la rim...
Spazzolini elettrici Oral-B iO in super ...
Samsung Galaxy Watch8 Classic e Watch7 a...
Blue Origin prosegue lo sviluppo di Blue...
Roborock Saros 10 e 10R dominano il merc...
Apple scatenata su Amazon: tutti gli sco...
Canon EOS C50 è la nuova videocam...
ASUS ProArt P16 arriva in Italia: la wor...
Fujifilm presenta l'obiettivo FUJINON GF...
Il grafene ha appena 'infranto' una legg...
Metroid Prime Beyond: arriva un trailer ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v