Domanda

Sto costruendo un semplice programma C ++ e voglio sostituire temporaneamente un sistema fornito libreria condivisa con una versione più recente di esso, per lo sviluppo e la sperimentazione.

Ho provato a impostare la variabile LD_LIBRARY_PATH, ma il linker (ld) venuto a mancare con:

  

/ usr / bin / ld: non riesce a trovare -lyaml-cpp

Mi aspettavo che per lavoro, perché secondo la pagina ld man:

  

Il linker utilizza la seguente ricerca   percorsi per individuare il termine condiviso   biblioteche: ... per un linker nativo,   il contenuto della variabile ambiente   "LD_LIBRARY_PATH" ...

Allora ho provato a fissare il LIBRARY_PATH, e che ha funzionato.

Secondo il manuale GCC:

  

Il valore di   LIBRARY_PATH è una lista separata da due punti   di directory, molto simile a PATH. quando   configurato come un compilatore nativo, GCC   cerca le directory così designati   durante la ricerca di linker speciale   file, se non riesce a trovare utilizzando   GCC_EXEC_PREFIX. Collegamento con GCC   utilizza anche queste directory quando   alla ricerca di librerie ordinarie   l'opzione -l (ma le directory   specificata con -L venire prima).

Come suggerisce il manuale (GCC), LIBRARY_PATH funziona perché collego con GCC.

Ma ..

  • Dato che io collego con gcc perché ld è essere chiamato, come il messaggio di errore suggerisce?
  • Qual è il punto di avente due variabili che servono la stessa scopo? C'è qualche altro sono differenze?
È stato utile?

Soluzione

LIBRARY_PATH è usato da gcc prima della compilazione di directory contenenti statica ricerca e le librerie condivise che devono essere collegato al vostro programma.

LD_LIBRARY_PATH viene utilizzato dal programma per le directory che contengono la ricerca condiviso le librerie dopo che è stato compilato e collegato con successo.

EDIT: Come sottolineato in basso, le librerie possono essere statici o in comune. Se è statico, allora il codice viene copiato nel vostro programma e non è necessario per cercare la libreria dopo che il programma è stato compilato e collegato. Se la libreria è condivisa quindi ha bisogno di essere dinamicamente collegato al tuo programma e che, quando LD_LIBRARY_PATH entra in gioco.

Altri suggerimenti

LD_LIBRARY_PATH viene cercato quando il programma si avvia, LIBRARY_PATH è cercato in fase di collegamento.

:

  

Da quando ho legame con gcc perché ld è chiamata, come suggerisce il messaggio di errore?

gcc chiama ld internamente quando è in modalità di collegamento.

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