Tenho uma grande coleção de bibliotecas que compilam corretamente, mas não são vinculadas. Estou usando o Visual Micro para Visual Studio 2015. Aqui está a coleção completa de mensagens de erro:
CommandPattern3.cpp.o:In function `DualMotorRomeo DualMotorRomeo.h:undefined reference to `vtable for DualMotorRomeo DualMotorRomeo.h:undefined reference to `vtable for DualMotorRomeo CommandPattern3.cpp.o:In function `__static_initialization_and_destruction_0 CommandPattern3.ino:undefined reference to `DualMotorRomeo ~DualMotorRomeo() collect2.exe*:error: ld returned 1 exit status Error compiling for board Arduino/Genuino Mega w/ ATmega2560 (Mega 2560)
Eu examinei o código com um pente de dentes finos, mas não pode ver quais referências são indefinidas.
Existe algum utilitário do Windows 10 que pode examinar as vTables e me ajudar a encontrar o que está faltando?
O código-base é muito grande para ser postado, mas posso fornecer um arquivo ZIP com todo o código para qualquer pessoa que queira ajudar.
Comentários
- O vinculador está se esforçando para ajudá-lo. Verifique DualMotorRomeo.h e se há um destruidor (pode precisar ser virtual dependendo da herança?).
Resposta
Não tenho o arquivo de cabeçalho para DualMotorRomeo
, mas o vinculador está dizendo que um destruidor foi declarado (~DualMotorRomeo()
) no cabeçalho da classe, mas nenhum destruidor foi definido. Se você não escreveu DualMotorRomeo
, a biblioteca precisa ser atualizada.
Até lá, basta adicione o seguinte a um de seus arquivos de origem:
DualMotorRomeo::~DualMotorRomeo() { } // DualMotorRomeo::~DualMotorRomeo()
Isso também corrigirá os vtable
erros do linker – o vtable
será incluído no arquivo compilado com isso declarado nele.