Misturando bibliotecas estáticas de Código C construídos a partir de diferentes versões do Visual Studio 2002 e versões posteriores
-
19-08-2019 - |
Pergunta
Eu tenho uma biblioteca linkable estática de C e rotinas Fortran compiladas e ligadas entre si usando o Visual Studio 2002 C (v7.0) Compiler ea Intel Fortran Compiler 9.0.018.
O código C em minha biblioteca chamadas e ligações à Microsoft C-Runtime (MSCRT) 2002 bibliotecas estáticas (single-threaded). Eu acredito que o número da versão atual das bibliotecas CRT 2002 é v7.0
Vou me referir a esta biblioteca estática como "vs2002if9.lib"
Posso ligar estaticamente à minha "vs2002if9.lib" com segurança usando qualquer versão posterior do Visual Studio (2003, 2005 ou 2008) sem quaisquer preocupações sobre como as chamadas comporta programa sobre as chamadas C tempo de execução?
Ou estou criando problemas misturando versão das bibliotecas CRT estáticas?
E se eu oferecer minha "vs2002if9.lib" para desenvolvedores de software 3rd party? Quais os requisitos que eu estou impondo-lhes?
Solução
Mistura tempos de execução C não tem trabalhado para mim no passado. A única maneira pela qual eu posso ver este trabalho {talvez} é se você está isolando completamente o uso da pilha / pilha dentro dos limites da estaticamente ligado C-Runtime [nada atravessa fronteiras através de parâmetros, mas, em seguida, o valor é o seu vs2009if9 lib fornecendo].
Por exemplo, se você está a ser atribuição de um ponteiro [memória heap] dentro do aplicativo e passar este ponteiro para a biblioteca que você forneceu, que Gestor de pilha deve ser usado? A resposta correta é o gerenciador de heap gerir o ponteiro, mas a sua biblioteca não vai saber sobre o outro gerenciador de heap. Ele fica mais feia se os seus aloca biblioteca memória para uso pelo aplicativo e é da responsabilidade aplicações livre / apagar usando o ponteiro fornecido (sim mau projeto, mas ainda possível). Mais uma vez, o gestor da pilha errada vai ser utilizado.