Como ligar com a biblioteca de tempo de execução C (CRT) correcto

Traduções de Artigos Traduções de Artigos
Artigo: 140584 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Existem seis tipos de bibliotecas reutilizáveis:
  • Estático único com a biblioteca (Debug/edição)
  • Biblioteca multithreaded estática (Debug/edição)
  • Dinâmica Biblioteca de ligação (DLL)(Debug/Release)
Nota Cada biblioteca tem uma versão de depuração e uma versão.

A DLL é optimizada para multithread e não for fornecida uma versão de thread único da biblioteca de CRT dll. Se a biblioteca reutilizável ou qualquer utilizador da biblioteca estiver a utilizar vários threads, a biblioteca tem de ser um tipo de multithread optimizada para a biblioteca.

Nota Bibliotecas de depuração e parâmetros de compilador /MLd, /MTd e /MDd só estão disponíveis no Visual C++ versões 4.0 e versões posteriores.

A tabela seguinte mostra o parâmetro de compilador deve ser utilizado para criar cada um dos seis tipos de bibliotecas reutilizáveis (todos os tipos DLL são multithread segurança). Qualquer projecto utiliza a biblioteca reutilizável deve utilizar o mesmo parâmetro de compilador. Quando utilizar os parâmetros de compilador /ML(default), MLd, /MT, MTd, /MD ou /MDd, o compilador coloca o nome de biblioteca predefinido (listado na coluna de biblioteca) no ficheiro de objecto.
Reusable Library            Switch    Library    Macro(s) Defined
----------------------------------------------------------------
Single Threaded             /ML       LIBC       (none)
Static MultiThread          /MT       LIBCMT     _MT
Dynamic Link (DLL)          /MD       MSVCRT     _MT and _DLL
Debug Single Threaded       /MLd      LIBCD      _DEBUG
Debug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MT
Debug Dynamic Link (DLL)    /MDd      MSVCRTD    _DEBUG, _MT, and _DLL
				
pode visualizar um módulo de objecto para determinar o parâmetro foi utilizado quando foi criado através deste comando:
   dumpbin /all <object>.obj
				
procurar na secção intitulada RAW DATA # 1. Na coluna mais à direita, as bibliotecas predefinido serão listadas.

Mais Informação

Uma biblioteca reutilizável e todos os respectivos utilizadores devem utilizar os mesmos biblioteca de tipos de CRT e, por isso, o mesmo parâmetro de compilador. As macros definido (ou não definido) para cada o compilador de parâmetros podem ser utilizados nos ficheiros de cabeçalho da biblioteca reutilizável para impor o parâmetro de compilador adequado. O código de exemplo neste artigo demonstra como utilizar estas macros.

Se pretender que os utilizadores do biblioteca poderá escolher estático ou CRT DLL, deve fornecer tanto estático DLL biblioteca reutilizáveis tipos.

Se pretender criar bibliotecas de CRT, lembre-se que tenha duas cópias separadas de CRT, com estados separados e distintos, pelo que deve ser cuidado tenta fazer através de um limite de CRT. Existem várias formas obter para problemas com dois CRTs. Seguem-se apenas alguns:
  • Existem duas pilhas separadas. Não é possível atribuir (explicitamente com malloc nova, ou caso do--ou implicitamente com strdup, strstreambuf::str e assim sucessivamente) e então passar o ponteiro ao longo de um limite de CRT para ser libertado.
  • Não é possível passar um identificador de ficheiro * ou ficheiro através de um limite de CRT e espera que o "stdio E/S de nível baixo" para trabalhar.
  • Não é possível definir a região numa e espera que a outra local a ser definido.
A partir do Visual C++ 4.0, o linker emitirá um aviso (LNK4098) se um módulo resultante tenta combinar mais do que uma cópia de biblioteca de CRT. Para obter mais informações, procure o ficheiro de ajuda para LNK4098.

Exemplo de código

O seguinte código pode ser utilizado no ficheiro de cabeçalho a biblioteca reutilizáveis para garantir a utilização consistente do parâmetro compilador correcto:
// MyReusableStaticSingleThreadReleaseLibrary.h
#if defined(_MT) || defined(_DEBUG)
    #error The /ML compiler switch is required.
#endif

// MyReusableStaticMultithreadReleaseLibrary.h
#if !defined(_MT) || defined(_DLL) || defined(_DEBUG)
    #error The /MT compiler switch is required.
#endif

// MyReusableDynamicLinkReleaseLibrary.h
#if !defined(_MT) || !defined(_DLL) || defined(_DEBUG)
    #error The /MD compiler switch is required.
#endif

// MyReusableStaticSingleThreadDebugLibrary.h
#if defined(_MT) || !defined(_DEBUG)
    #error The /MLd compiler switch is required.
#endif

// MyReusableStaticMultithreadDebugLibrary.h
#if !defined(_MT) || defined(_DLL) || !defined(_DEBUG)
    #error The /MTd compiler switch is required.
#endif

// MyReusableDynamicLinkDebugLibrary.h
#if !defined(_MT) || !defined(_DLL) || !defined(_DEBUG)
    #error The /MDd compiler switch is required.
#endif
				

Propriedades

Artigo: 140584 - Última revisão: 1 de julho de 2004 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Standard Edition
  • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Palavras-chave: 
kbmt kbcrt kbhowto KB140584 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 140584

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com