Domanda

Ho una libreria C ++ e un'applicazione C ++ che cercano di utilizzare funzioni e classi esportate dalla libreria. La libreria funziona bene e l'applicazione si compila ma non riesce a collegarsi. Gli errori che ottengo seguono questo modulo:

  

app-source-file.cpp :(. text + 0x2fdb): riferimento indefinito a `lib-namespace :: GetStatusStr (int) '

Le classi nella libreria sembrano essere risolte bene dal linker, ma funzioni libere e dati esportati (come una tabella di ricerca del coseno) causano invariabilmente l'errore sopra.

Sto usando Ubuntu 8.04 (Hardy) ed è aggiornato con gli ultimi pacchetti Ubuntu.

Il comando per collegare la libreria è (con altre librerie rimosse):

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so

Il comando per collegare l'applicazione è (con altre librerie rimosse):

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question

Infine, sembra (per quanto posso dire) che i simboli in questione vengono esportati correttamente:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
È stato utile?

Soluzione

la U prima di _ZN3lib-namespace12GetStatusStrEi nell'output nm mostra che il simbolo è indefinito nella libreria.

Forse è definito nello spazio dei nomi sbagliato: sembra che tu lo stia chiamando in lib-namepace ma potresti definirlo in un altro.

Altri suggerimenti

È passato un po 'di tempo, ma se si specifica una lib con l'opzione -l, allora non si ha il prefisso lib da saltare?

(Ho cambiato il nome da " lib-in-question.so " a " libfoobar.so " per una lettura più semplice nell'esempio seguente)

g++ -fPIC -Wall -O3  -L~/project/lib/release -lfoobar

o

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top