Domanda

Ho capito come impostare VC ++ per compilare il codice in un file .lib anziché in un file .exe, ma ho problemi a ottenere una lib da collegare insieme ai miei altri file .obj.

Ecco come ho impostato la libreria e le cartelle dell'applicazione. (Non sono sicuro che sia corretto)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

e da qualche altra parte sul disco rigido ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

Ho incluso # tra cui i file della libreria * .h dai file cpp della mia app e tutto si compila bene. È solo quando si collega che ottengo un elenco di tutti i .lib file che vengono cercati e Library.lib non è presente anche se l'ho elencato nelle directory VC ++. Come posso ottenere questo link? (E sto strutturando correttamente le cartelle della libreria?)

È stato utile?

Soluzione

Sulle proprietà del progetto:

Proprietà di configurazione - > Linker - > Input - > Dipendenze aggiuntive

Aggiungilo qui.

Oppure, nel tuo file .h per la libreria, aggiungi:

#pragma comment(lib, "Library")

Questo lo farà automaticamente per te.

Altri suggerimenti

Le directory VC ++ sono l'elenco dei percorsi delle directory da cercare durante il collegamento. Non è un elenco di librerie in cui collegarsi.

Devi aggiungere il file lib al campo Dipendenze aggiuntive delle impostazioni Project Linker .

Per collegarti a una libreria, puoi:

  • Elencalo in Project- > Proprietà ...- > Linker, Input- > Dipendenze aggiuntive  (Le directory VC ++ ti consentono di utilizzare solo il nome .lib anziché il percorso completo),
  • Aggiungi il progetto della libreria alla tua app. soluzione (Sulla soluzione, fai clic con il pulsante destro del mouse - > Aggiungi - > Progetto esistente ...), quindi usa Progetto - > Dipendenze del progetto ..., quindi controllare il progetto della libreria (assicurarsi che il progetto dell'applicazione sia selezionato nel menu a discesa). Questo è probabilmente il modo migliore se stai modificando entrambi i progetti, poiché VC ++ ricostruirà la libreria se è cambiata prima di creare la tua app.
  • Se sei sicuro di usare solo VC ++,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (Grazie @Nils)

NB: Sembra molto strano che la cartella della soluzione della libreria sia all'interno di una directory 'include': che sono realmente destinati a * .h (o altri file #include d).

Dalla riga di comando:

  

cl / EHsc {objfiles} + / link   / LIBPATH: LibraryFolder Library.lib

Dove {objfiles} + indica uno o più file oggetto o cpp.

VC non collega semplicemente la libreria se includi il file header.

Devi dire al linker di usare la libreria. Per buoni motivi: hai già migliaia di librerie nella cartella della libreria. Se MSVC dovesse cercarli tutti ogni volta che colleghi il tuo programma, avrebbe dovuto guadare centinaia di megabyte di dati.

Ci vorrebbe un po 'di tempo, quindi non è fatto di default.

Per VC puoi anche dare un suggerimento al linker all'interno del tuo sorgente. Per fare ciò aggiungi la seguente riga da qualche parte nel tuo codice sorgente (l'intestazione della lib può essere un buon posto).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

Questo non è indipendente dalla piattaforma ma il modo più conveniente per ottenere una lib automaticamente collegata a un progetto usando MSVC.

Un altro modo è semplicemente aggiungere il linker alle impostazioni del progetto. Le informazioni pertinenti sono disponibili nelle impostazioni del linker del progetto. Non dimenticare di aggiungere la lib alle configurazioni di rilascio e debug.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top