Misturando bibliotecas estáticas de Código C construídos a partir de diferentes versões do Visual Studio 2002 e versões posteriores

StackOverflow https://stackoverflow.com/questions/462768

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?

Foi útil?

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.

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