Erro de linker (ln): não é possível encontrar determinados arquivos

1

Estou criando algo a partir do código-fonte e recebo a seguinte saída ao executar o make:

  ...
  CC     libpromises_la-mod_outputs.lo
  CC     libpromises_la-unix.lo
  CCLD   libpromises.la
  CC     cfknow.o
  CC     manual.o
  CCLD   cf-know
./.libs/libpromises.so: undefined reference to 'dlerror'
./.libs/libpromises.so: undefined reference to 'dladdr'
./.libs/libpromises.so: undefined reference to 'dlclose'
./.libs/libpromises.so: undefined reference to 'dlopen'
./.libs/libpromises.so: undefined reference to 'dlsym'
collect2: ld returned 1 exit status
gmake[2]: *** [cf-know] Error 1
gmake[2]: Leaving directory '/tmp/cfengine/cfengine-3.1.5/src'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory '/tmp/cfengine/cfengine-3.1.5/src'
gmake: *** [all-recursive] Error 1

Eu pesquisei um pouco e parece que o vinculador não consegue encontrar certos arquivos. Eu nunca tive que lidar com algo assim, então eu estou querendo saber se alguém pode me ajudar a decodificar esta mensagem e derramar uma visão sobre qual arquivo não pode ser encontrado e como posso dizer ao vinculador onde ele está.

Eu sei que a referência vem de libpromises.so , que é um arquivo binário. Por isso, abri-lo no vi só me dá garble. Eu deveria estar procurando por libpromises.h ? libpromises.c ?

    
por n0pe 08.07.2011 / 15:56

1 resposta

2

Você deve poder editar o Makefile e realizar isso rapidamente.

NOTA - Isso pressupõe que o Makefile foi feito pelo GNU Autotools. De acordo com o tarball Cfengine, eles fazem.

Primeiro, abra o Makefile e procure o sinalizador LDFLAGS . Deve ser algo como isto:

LDFLAGS=-lfoo -lbar

Anexe a essa listagem -ldl . Isso adiciona uma referência à biblioteca de carregamento dinâmico.

Recompile e o vinculador deve ser capaz de fazer seu trabalho.

A variável de ambiente LIBS é uma variável de ambiente que informa a ./configure quais bibliotecas extras são necessárias, que então são armazenadas no Makefile (assim, para responder à sua pergunta, ./configure não executa o linker - faz o Makefile, que executa gcc com os parâmetros que obteve de ./configure ).

Então, use LIBS=-ldl && ./configure .

    
por 09.07.2011 / 03:48

Tags