Pergunta

É correto vincular uma biblioteca estática (.lib) compilada com o VS 2005 a um programa compilado com o VS 2008?Tanto a biblioteca quanto meu programa são escritos em C++.Este programa é executado no emulador do Windows Mobile 6 Professional.

Isso parece funcionar, não há erros de vinculação.No entanto, o programa trava durante a inicialização porque coisas estranhas acontecem dentro da biblioteca vinculada.Por exemplo.lib pode retornar um vetor de caracteres com tamanho de um grande número negativo.

Não existem tais problemas quando o programa é compilado com o VS 2005.

O que é ainda mais estranho é que o problema ocorre apenas ao usar a configuração de versão para a compilação.Ao compilar usando a configuração de depuração, o problema não ocorre.

Foi útil?

Solução

VS2005 e VS2008 usam implementações STL diferentes.Quando o código do VS2005 retorna um vetor, o objeto possui um layout de memória diferente do esperado pelo VS2008.Esse deve ser o motivo dos valores quebrados que você vê na data retornada.

Como regra geral, você deve sempre compilar todos os módulos C++ de um projeto com o mesmo compilador e todas as configurações/#definições iguais.

Um #define específico que causa comportamento semelhante é o SECURE_SCL #define do VS2008.Dois módulos compilados com configurações diferentes criarão exatamente os seus problemas, porque #defining SECURE_SCL introduz mais variáveis ​​de membro em várias classes da biblioteca C++.

Outras dicas

Não é incorreto vincular a uma biblioteca mais antiga da maneira que você descreve, mas não me surpreende que você esteja vendo algum comportamento estranho.Verificações de sanidade do casal:

  • Ambos os arquivos estão usando o mesmas versões do mesmas bibliotecas de tempo de execução?
  • Seu aplicativo .EXE está "vendo" os mesmos arquivos de cabeçalho contra os quais o .LIB foi criado?Certifique-se de que as macros _WIN32_WINNT (etc.) estejam declarado corretamente.

E quando você diz .LIB, você quer dizer uma biblioteca estática verdadeira (mylib.lib) ou uma biblioteca de importação para uma DLL (mylib.lib -> mylib.dll)?

E quais são as configurações de compilação/link para o seu projeto executável do VS2008?

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