2012-04-30 14 views
5

Il mio programma è costruito come un caricatore e molti moduli che sono librerie condivise. Ora una di queste librerie utilizza pthreads e sembra legata al modulo in modo dinamico (caricata all'avvio). Ora sarebbe più semplice se potessi forzare il collegamento di pthreads nel file del modulo. GCC su Linux, come faccio? Immagino che un libpthread.a sia necessario ....Forza GCC a collegamento statico, ad es. pthreads (e non collegamento dinamico)

+0

In quale istanza devi fare qualcosa di diverso da includere l'intestazione pthread per farlo compilare? Hai un esempio di fonte? Questo metodo di compilazione di un assoluto deve? –

risposta

16

Mentre il collegamento di libpthread.a in una libreria condivisa è teoricamente possibile, è una pessima idea. Il motivo è che libpthread fa parte di glibc e tutte parti di glibcdevono corrispondere esattamente a oppure si verificano arresti anomali e non spiegabili.

Quindi collega libpthread.a nella tua libreria condivisa volontà:

  1. causare il crash del programma quando viene spostato a una macchina con una versione diversa di glibc
  2. causare il programma esistente in crash quando della macchina corrente glibc è aggiornato, ma il modulo non è ricollegato per l'aggiornamento libpthread.a.

Risparmia te stesso l'irritazione e non farlo.

+0

: o oh mio dio oh mio Dio, Bene, lo dici. Ma quando la sua parte di glibc, .../me è derped .. – imacake

+1

Grazie. Come la risposta Una query però - Se libpthread fa parte di libc/glibc, perché viene fornito come una libreria separata. Quasi tutti i collegamenti di libs a libc e quindi, quale era allora la necessità di libpthread – Kiran

+0

@Kiran "Perché è fornito come una libreria separata" - perché molti programmi non hanno bisogno di thread, e il collegamento in 'libpthread' impone un inutile sovraccarico su tali programmi. –

Problemi correlati