I problemi sorgono con la libc e il pthreading delle applicazioni C?

1

Il problema che ho riscontrato è che sto impacchettando le librerie condivise con il mio codice per caricare GNUTLS, eccetto per libc, perché ho pensato che qualsiasi sistema lo avrebbe. La maggior parte di loro non ha il necessario 2.14 per questo (eccetto per Ubuntu o altri con scoraggianti aggiornamenti e macellazione del repository). So che è una cattiva forma essere dipendente in questo modo, ma ho bisogno di una build molto recente di GNUTLS, quindi è stata l'unica soluzione che ho pensato.

Per risolvere il problema con libc, è sicuro pacchettizzare libc & pthread (un altro dipendente), con il mio programma? Il mio programma è Java, usando JNI per caricare queste librerie se questo è rilevante. Questo è tutto per Linux.

    
posta JavaProphet 02.09.2015 - 04:26
fonte

2 risposte

3

libc è così centrale per i sistemi Linux (vedi anche nnsswitch.conf (5 ) ) che eviterei di spedire il mio. La maggior parte dei sistemi ha GNU libc (l'ultima versione è la 2.22 da agosto 2015, la mia stable Debian / Jessie ha una libu GNU 2.19; un altro computer che esegue Linux / Mint ha una libc GNU 2.17. Quindi sento che una libk GNU 2.14 (pubblicata nel 2011) è piuttosto antica in questi giorni. Alcune distribuzioni Linux potrebbero usare altre librerie standard C come musl-libc

Hai considerato di avere una procedura di installazione (forse solo make install ) che controlla prima che libc sia abbastanza recente, e che altrimenti fallisca con un messaggio di errore significativo?

La versione corrente di GNUTLS è 3.3.17 (da agosto 2015). Potresti spedirlo se necessario.

I pthreads fanno parte di GNU libc (anche se a volte GNU libc installa anche una libreria libpthread.so separata) poiché NPTL .

BTW se stai sviluppando software libero, potresti pubblicarlo come codice sorgente, impacchettarlo per una o due distribuzioni e mettere il peso della confezione per altre distribuzioni su di esse.

    
risposta data 02.09.2015 - 09:57
fonte
0

Un altro modo per risolvere questo problema è usare un sistema di make e automake come GNU Autotools per configurare il codice per le chiamate di funzione in libc di cui hai bisogno piuttosto che direttamente in libc. Ciò risolverà il problema della portabilità.

link

È altamente indesiderato trasportare la tua libc in quanto potrebbe causare problemi e un comportamento non specificato.

    
risposta data 10.09.2015 - 05:28
fonte

Leggi altre domande sui tag