Pergunta

Eu estou trabalhando em um ambiente Linux com C ++, usando o compilador GCC.

Atualmente estou trabalhando em modificar e atualizar um grande corpo pré-existente de código. Como parte deste, foi necessário adicionar um número bastante grande de pequenas referências em todo o código em uma variedade de lugares para ligar as coisas juntos, e também para adicionar várias novas bibliotecas de código externas. Há também uma estrutura muito grande e complexo de Makefiles vinculado a um arquivo configure.ac para lidar com o processo de construção.

Ao iniciar os tudo compila processo de construção sem nenhum problema, mas volta com o erro de vinculador temido ao tentar usar uma biblioteca de código personalizado recém-adicionado que nós criamos. Temos agora através de uma vasta quantidade de código com um pente fino dente procurando descasamentos de ortografia, verificando a fim de que todas as bibliotecas estão incluídas no processo de construção, e verificou que os arquivos .o criado contêm o que precisamos usando lixeiras e todos são como e onde eles devem ser. Nós também testamos a biblioteca separadamente e o problema definitivamente não reside lá.

Em suma, temos tentado maioria das coisas que você normalmente deve fazer nestes cenários.

Existe uma ferramenta para C ++ que pode detectar erros vinculador automaticamente, em uma veia semelhante ao cppcheck ou tala (ambos de que temos executado sem sucesso) que poderia ajudar aqui?

Foi útil?

Solução

não sei a sua plataforma, mas eu passei algum tempo com problemas de vinculador em gcc até que eu percebi que a biblioteca estática (.a) ligando requer ordenação específica, não é a mesma para gcc object.o first.a second.a ligação de gcc object.o second.a first.a.

Outras dicas

FWIW (não muito) I tentar resolver este tipo de problema usando outro vinculador como eu tenho acesso a um par de diferentes plataformas. Se você pode usar outro ligador você vai encontrar tanto:

a) as ligações do programa, que transforma o seu problema de 'por que não ligar?' para 'o que são as diferenças entre os ligantes e ligando? que não é exatamente um passo em frente, mas às vezes um passo para um lado dá-lhe uma perspectiva diferente a partir do qual você pode ver uma solução;

ou

b) ele não consegue link, caso em que o outro vinculador pode dar mais informações úteis sobre o porquê de ele falhar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top