Come organizzo un progetto C che usi le librerie?

4

Prima di tutto, sono relativamente nuovo a C - conosco un po 'il linguaggio, ma non ho mai dato troppa importanza all'intero processo di compilazione.

Da quello che sto vedendo, se voglio usare una libreria di terze parti e averla in forma di codice sorgente, vorrei compilare quella libreria separatamente (che produce una piattaforma e un blob binario specifico per l'architettura?), copia su. h file da quella libreria nel mio progetto, e poi dire al mio linker che dovrebbe collegarsi a quello.

Da quello che ho letto , sembra che dovrei usare lo stesso compilatore e assicurarmi che vengano compilati per la stessa piattaforma, il che mi fa pensare a come dovrei strutturare il mio progetto e costruire.

Sembra imprudente lavorare con le librerie precompilate, e invece dovrei controllare il codice sorgente di quelle librerie (ad esempio, SDL, Lua, NCurses, qualsiasi Parser JSON ecc.) e poi creare queste librerie da zero ogni volta Ho (ri) compilato la mia domanda.

Questo sembra un enorme dolore, a causa dei diversi sistemi di costruzione. Vengo dal mondo C # in cui i sistemi di imballaggio (e il formato di libreria binaria per lo più indipendente dalla piattaforma) rendono questo molto più semplice.

Qual è il modo giusto di lavorare con le librerie in un progetto C? (No C ++)

    
posta Michael Stum 29.02.2016 - 21:44
fonte

1 risposta

5

Hai praticamente ragione finora. La magia è che anche il mondo C ha sistemi di confezionamento e vengono con il tuo sistema operativo!

Ora, prima di essere troppo eccitato, questo dipende dalla tua piattaforma. Le moderne distribuzioni Linux hanno gestori di pacchetti e le librerie più popolari sono distribuite in forma binaria da questi sistemi. Ad esempio, un programma che richiede il connettore MySQL probabilmente dipende dal pacchetto mysql . Questi sistemi spesso distribuiscono anche l'origine per quelle librerie per l'utilizzo dello sviluppo (per il proprio caso d'uso, in effetti), ad esempio il pacchetto mysql-devel .

Per le librerie meno comuni, potrebbe essere necessario scaricare la sorgente da soli. potresti controllarlo nel tuo sistema di controllo delle versioni, ma questo è considerato un anti-pattern: sarebbe meglio invece documentare solo in README che è richiesta la visibilità di fonti di terze parti qualsiasi sistema di costruzione ipotetico. Uno sviluppatore che lavora al tuo progetto lo estrae nel posto appropriato, ad es. /usr/local/include e /usr/local/lib se necessario.

E su Windows è praticamente un requisito comunque.

Non ho idea di OSX o di piattaforme più esotiche.

Per quello che vale, questo è lo stesso per C ++ e, in effetti, per praticamente tutti gli altri linguaggi di programmazione back-end "mainstream" a cui posso pensare in questo momento.

    
risposta data 29.02.2016 - 22:02
fonte

Leggi altre domande sui tag