Pergunta

Eu tenho uma biblioteca C ++ e um aplicativo de C ++ tentando usar funções e classes exportados a partir da biblioteca. A biblioteca constrói finas ea aplicação compila mas não consegue link. Os erros fico seguir esta forma:

.

aplicativo de código-file.cpp :( texto + 0x2fdb): undefined reference to `lib-namespace :: GetStatusStr (int) '

As aulas na biblioteca parecem ser resolvido muito bem pelo vinculador, mas funções livres e dados exportados (como uma tabela de pesquisa cosseno), invariavelmente, resultam no erro acima.

Eu estou usando Ubuntu 8.04 (Hardy), e é atualizado com os últimos pacotes do Ubuntu.

O comando para vincular a biblioteca é (com outras bibliotecas removido):

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

O comando para ligar a aplicação é (com outras bibliotecas removidos):

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

Finalmente, parece (o melhor que eu posso dizer) que os símbolos em questão estão sendo exportados corretamente:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
Foi útil?

Solução

U antes _ZN3lib-namespace12GetStatusStrEi nos shows de saída nm que o símbolo é indefinido na biblioteca.

Talvez seja definida no namespace errado:. Parece que você está chamando-o em lib-namepace mas você pode estar definindo-o em outro

Outras dicas

Tem sido um tempo, mas se você especificar um lib com a opção -l, então você não tem a pular o lib prefixo?

(eu mudei o nome de "lib-in-question.so" para "libfoobar.so" para facilitar a leitura para o exemplo abaixo)

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

ou

g++ -fPIC -Wall -O3  ~/project/lib/release/libfoobar.so
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top