Como vincular com a biblioteca C Run-Time (CRT) correto

Traduções deste artigo Traduções deste artigo
ID do artigo: 140584 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Existem seis tipos de bibliotecas reutilizáveis:
  • Estático único thread biblioteca (Debug/Release)
  • Biblioteca estática multithreaded (Debug/Release)
  • Dinâmico Biblioteca de vínculo (DLL)(Debug/Release)
Observação Cada biblioteca tem uma versão de depuração e uma versão de lançamento.

A DLL é multithread-safe e uma versão de thread único da biblioteca CRT não é fornecida para DLLs. Se a biblioteca reutilizável ou qualquer usuário da biblioteca estiver usando vários segmentos, em seguida, a biblioteca precisa ser um tipo de biblioteca multithread-safe.

Observação Bibliotecas de depuração e opções de compilador /MLd, /MTd e /MDd só estão disponíveis no Visual C++ versões 4.0 e posterior.

A tabela a seguir mostra qual opção de compilador deve ser usada para a criação de cada um dos seis tipos de bibliotecas reutilizáveis (todos os tipos DLL são multithread-safe). Qualquer projeto que usa a biblioteca reutilizável deve usar a opção compilador mesmo. Quando usando as opções de compilador /ML(default), MLd, /MT, MTd, /MD ou /MDd, o compilador coloca o nome de biblioteca padrão (listado na coluna de biblioteca) no arquivo do objeto.
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
				
você pode exibir um módulo de objeto para determinar qual opção foi usada quando ele foi criado usando este comando:
   dumpbin /all <object>.obj
				
examinar a seção dados RAW # 1. Na coluna mais à direita, as bibliotecas padrão serão listadas.

Mais Informações

Uma biblioteca reutilizável e todos os seus usuários devem usar os mesmos tipos biblioteca CRT e, portanto, a mesma opção compilador. As macros definido (ou não definido) para cada um do compilador opções podem ser usadas nos arquivos de cabeçalho da sua biblioteca reutilizável para impor a opção de compilador adequado. O código de exemplo neste artigo demonstra como usar essas macros.

Se você quiser que os usuários da biblioteca para poder escolher estático ou DLL CRT, você deve fornecer estática e tipos de biblioteca reutilizável de DLL.

Se você escolher misturar bibliotecas CRT, lembre-se de que você tem duas cópias separadas do CRT, com estados separados e distintos, portanto, você deve ser cuidado sobre o que você tentar fazer em um limite de CRT. Há várias maneiras para entrar em problemas com dois CRTs. Aqui estão apenas alguns:
  • Há dois heaps separados. Não é possível alocar (explicitamente com novo, malloc, ou em--ou implicitamente com strdup, strstreambuf::str e assim por diante) e em seguida, passar o ponteiro em um limite de CRT para ser liberado.
  • Não é possível passar um identificador de arquivo 1 ou o arquivo em um limite de CRT e esperar o "stdio E/S de baixo nível" para trabalhar.
  • Não é possível definir a localidade em um e esperado do outro local para ser definido.
Começando com Visual C++ 4.0, o vinculador emitirá um aviso (LNK4098) se um módulo resultante tenta combinar mais de uma cópia da biblioteca CRT. Para obter mais informações, procure o arquivo de Ajuda para LNK4098.

Código de exemplo

O código a seguir pode ser usado no arquivo de cabeçalho da biblioteca reutilizável para garantir o uso consistente da opção de compilador correto:
// 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

ID do artigo: 140584 - Última revisão: quinta-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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