PDA

View Full Version : [C] metodo "out of the box" per distribuire un software + libreria .so


Duchamp
24-07-2010, 13:12
Ciao raga,
in questi giorni sto cercando un buon metodo per distribuire un software (già compilato), basato su alcune librerie esterne. Sarebbe bello se l'utilizzatore finale dovesse fare il minor sforzo possibile per far partire il programma: unzip dei materiali e doppio click sull'eseguibile. Ho già visto che qualcuno crea una sottodirectory "libs" che contiene tutti i file .so (librerie dinamiche, ambiente linux) e mi sembra un'ottima idea: lo è anche secondo voi?
Non ho problemi nella compilazione ma rimane un punto oscuro: dopo aver "copiato" i file utili da usr/lib (ad esempio) come faccio a linkarli in gcc con il nuovo path, che è in questo caso [mio_programma]/libs? Inoltre, gli header posso tranquillamente lasciarli nella cartella di sistema /include?
Vi ringrazio in anticipo per qualsiasi suggerimento, anche solo relativo alla scelta della cartella libs. Ovviamente guide e link sono i benvenuti :cool:

tuccio`
24-07-2010, 13:18
se distribuisci l'eseguibile già compilato non servono gli header, servono solo librerie linkate dinamicamente.. ma ti fa schifo usare il make? O:

Duchamp
24-07-2010, 13:28
se distribuisci l'eseguibile già compilato non servono gli header, servono solo librerie linkate dinamicamente.. ma ti fa schifo usare il make? O:

ciao tuccio`, ma con o senza make il problema rimane, o no? Anche nel makefile io devo specificare il path della libreria, che non è più in /usr ma nella cartella del mio software... O forse non ho colto il senso della tua osservazione :D

tuccio`
24-07-2010, 16:53
nel make puoi mettere nella regola install un semplice cp libreria.so /usr/lib/libreria.so

e visto che ci sei distribuisci anche il sorgente e compila tutto con make ^_^

marco.r
25-07-2010, 13:25
Non ho problemi nella compilazione ma rimane un punto oscuro: dopo aver "copiato" i file utili da usr/lib (ad esempio) come faccio a linkarli in gcc con il nuovo path, che è in questo caso [mio_programma]/libs? Inoltre, gli header posso tranquillamente lasciarli nella cartella di sistema /include?

Gli include servono solo per compilare per cui se distribuisci solo l'eseguibile lasciali pure dove sono. Per le librerie hai due alternative
1) colleghi staticamente le librerie all'eseguibile che quindi conterra' tutto il necessario e non necessitera' di file .so esterni
2) prepari uno script da far lanciare (al posto dell'eseguibile) che prima di far partire il programma vero e proprio imposti tra le altre cose la variabile d'ambiente LD_LIBRARY_PATH in modo che punto alla cartella con i file .so

Duchamp
26-07-2010, 14:09
Ciao di nuovo a tutti e grazie per le risposte. Purtroppo, vista l'utenza che utilizzerà il software, non è proprio possibile parlare di make e compilazione da sorgenti :D Dev'essere sul serio un binario già compilato pronto per l'uso.

Quindi se setto la variabile d'ambiente LD_LIBRARY_PATH con la cartella [mio_programma]/libs, questo path andrà a sovrascrivere quelli già esistenti standard o si aggiungerà semplicemente in coda?

cionci
27-07-2010, 09:49
Sai già la distribuzione target sulla quale andrà installato ?

Z80Fan
27-07-2010, 11:29
Ciao!
Quindi se setto la variabile d'ambiente LD_LIBRARY_PATH con la cartella [mio_programma]/libs, questo path andrà a sovrascrivere quelli già esistenti standard o si aggiungerà semplicemente in coda?
si, a meno che non usi qualcosa del tipo
LD_LIBRARY_PATH = $LD_LIBRARY_PATH; path;path

Se vuoi, conosco questo programma...
http://www.phunland.com/wiki/Download
...che usa lo script di avvio (che si chiama phun) per settare il path giusto, e poi avvia l'eseguibile vero e proprio (che si chiama phun.bin).

cionci
27-07-2010, 11:37
Comunque quel path lo puoi settare anche al momento in cui vai a lanciare il programma. All'utente farai lanciare uno script bash invece del programma direttamente, così puoi manipolare quella variabile d'ambiente come più ti aggrada.

lock cmpxchg8b %ebx
27-07-2010, 16:48
E aggiungere $ORIGIN/libs al RPATH?
Così non servono script...

Duchamp
27-07-2010, 22:15
Sai già la distribuzione target sulla quale andrà installato ?

Sarà quasi sicuramente usato su Ubuntu e derivati, considerata la diffusione...

Ringrazio tutti per le varie segnalazioni, mi prendo un paio di giorni di studio per le info che mi avete fornito, posterò in caso di problemi! :)

cionci
28-07-2010, 06:59
Sarà quasi sicuramente usato su Ubuntu e derivati, considerata la diffusione...
Allora fai un pacchetto deb e ti togli la paura ;) Così avrai sotto controllo l'installazione, l'upgrade e la disinstallazione.

Duchamp
30-07-2010, 18:54
Benissimo, come anticipato eccomi di ritorno a martellare :ciapet:
Il .deb è sicuramente un'ottima idea per il futuro, ma vorrei studiarmelo con calma onde evitare ca**ate. Mi ha attirato molto il flag -rpath, tuttavia leggendo la documentazione non ho capito se dev'essere passato al linker durante la compilazione della libreria oppure quando si compila l'eseguibile finale... potreste farmi/linkarmi qualche esempio concreto? Ringrazio in anticipo.