2012-06-08 15 views
6

Mi chiedo come "impacchettare" un progetto C++ per il rilascio. Usa varie librerie e non voglio che un utente debba passare attraverso la stessa configurazione che ho fatto, mettendo i file giusti nel posto giusto e così via. Ho avuto difficoltà a fare ricerche su questo, perché non sono sicuro del termine tecnico per questo problema. Se sto usando la compilazione della riga di comando su Linux, c'è un modo semplice per farlo?Come impacchettare C++ con DLL e librerie

+0

Stai compilando dll su linux? – Attila

+0

Scusate, sono stupido, sto facendo lo sviluppo su Linux e Windows adesso, e ho dovuto fare un sacco di setup per le mie librerie su entrambi; Sono un newb e sto probabilmente mescolando i due. Devo collegarmi alle librerie, cosa che ho fatto su Windows con DLL (almeno penso che stia succedendo lì). Sto modificando la domanda per dire solo le librerie, perché non conosco le giuste distinzioni tecniche tra le cose. – akroy

+1

Esistono due versioni di librerie: statiche e dinamiche. Le librerie statiche sono collegate direttamente con l'eseguibile, quindi non devi preoccuparti di posizionarle ovunque (il codice fa parte dell'eseguibile). Con le librerie dinamiche, dovrai assicurarti che il runtime possa trovarle: dovrai o metterle su un percorso comune, o impostare il percorso cercato per le librerie per includere la directory in cui si trovano. Leggi questi [due] (http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html) [articoli] (http://www.eyrie.org/~eagle/notes/rpath.html) per maggiori informazioni. – Attila

risposta

4

Il tuo approccio a questo sarà diverso su Windows e Linux perché ogni sistema operativo gestisce questo in modo diverso. Ho più familiarità con Linux quindi limiterò la mia risposta solo al lato Linux delle cose.

Quando si collega il file eseguibile con una libreria utilizzando flag -l, il linker passa automaticamente alla ricerca nelle normali directory della libreria di sistema, quindi qui ci sono quattro approcci.

  1. Richiede all'utente di installare correttamente le librerie stesse. Tuttavia, sembra che tu non voglia farlo.

  2. L'utente aggiunge la posizione della libreria alla variabile LD_LIBRARY_PATH.

  3. La terza opzione è forzare il linker a cercare in un determinato percorso per le librerie utilizzando il flag -rpath. Ad esempio, per vedere l'applicazione nella sua directory di lavoro per una libreria condivisa è possibile compilare: g++ -rpath ./ -l SomeLib -o MyApp myapp.cpp

  4. Un'altra opzione è quella di collegare staticamente il codice con la libreria in questo modo è necessario distribuire un solo file eseguibile. Se esiste una libreria statica, è possibile utilizzare g++ -static -l SomeLib -o MyApp myapp.cpp per comunicare a gcc di collegarsi staticamente.

+0

Perché non collegarli tutti staticamente? – vidit

+0

@vidit Suppongo che includere il collegamento statico sarebbe una buona idea. Modifico il mio post. Grazie per avermi ricordato. –

+0

Il collegamento statico non funziona sempre, ad es. quando usi le librerie GPL ma non vuoi concedere in licenza il tuo programma in GPL. – Cubic

1

Intendi un installatore?
Su Windows il programma che esegui per installare una nuova app che estrae tutto nella directory corretta, crea il menu di avvio e ti consente di disinstallarlo?

C'è un programma di installazione in Visual Studio (potrebbe non essere nella versione express gratuita) che rende i file di installazione .msi. È abbastanza facile da usare per compiti semplici, ma diventa complicato fare di più.

In alternativa, per creare tipo tradizionale setup.exe installa io uso l'eccellente libera Innosetup

su Linux si sarebbe generalmente creare un pacchetto utilizzando qualsiasi formato i vostri usi di distribuzione (.deb/.rpm). Ci sono molte istruzioni sulle specifiche di ciascuno e gli strumenti per farlo saranno probabilmente già installati nel tuo sistema Linux

2

Su Windows Consiglierei Wix http://wix.sourceforge.net/ per creare l'installer msi vorrei sottolineare, il percorso di ricerca per file .dll Consiglierei mettendo tutta dll nella stessa cartella del file exe dal momento che questo ha la priorità più alta

Tuttavia, il crt vc (C/C++ runtime library) deve essere installato utilizzando il pacchetto redistributivo da Microsoft -> aggiorna automaticamente http://www.microsoft.com/de-de/download/details.aspx?id=5555

Wix può includere il pacchetto redistributivo nella stessa mSI quindi devi solo distribuire un singolo file di installazione.

Problemi correlati