Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Quando a biblioteca de tempo de execução C (CRT) e bibliotecas Microsoft Foundation Classes (MFC) estão ligadas na ordem errada, poderá receber um dos seguintes erros LNK2005:
nafxcwd.lib(afxmem.obj): erro LNK2005: "void * __cdecl operador novo (int não assinado)"??2@YAPAXI@Z) já definido em LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): erro LNK2005: "anular __cdecl operador delete(void *)"??3@YAXPAX@Z) já definido em LIBCMTD.lib(dbgnew.obj)
As bibliotecas de CRT utilizam fraca ligação externa para o Novo , Eliminar e funções de DllMain . As bibliotecas MFC também contenham Novo , Eliminar e funções de DllMain . Estas funções requerem as bibliotecas MFC seja ligado antes da biblioteca de CRT está ligada.
Existem duas formas para resolver este problema. A primeira solução envolve forçar linker para ligar as bibliotecas na ordem correcta. A solução segunda permite-lhe para localizar o módulo que está a causar o problema e corrigi-la.
Nota Os seguintes passos são baseados no Visual C++ 6.0.
Uma solução: Ligador de forçar para bibliotecas de ligação na ordem correcta
No Project menu, clique em definições .
Na vista De definições da caixa de diálogo Definições do Project , clique para seleccionar a configuração de projecto que estiver a obter os erros de ligação.
No separador ligação , clique para seleccionar entrada na caixa de combinação categoria .
Na caixa Ignorar bibliotecas , insira os nomes de biblioteca (por exemplo, Nafxcwd.lib;Libcmtd.lib).
Nota O equivalente da linha de comandos linker em /NOD: < nome da biblioteca >.
Na caixa objecto/biblioteca módulos , insira os nomes de biblioteca. Tem de se certificar que estes estão listados por ordem e como as primeiro duas bibliotecas na linha (por exemplo, Nafxcwd.lib Libcmtd.lib).
Para definir esta opção no Visual C++. NET, leia o tópico de ajuda online "Definição Visual C++ propriedades do projecto".
Solução 2: Localizar e corrigir o problema do módulo
Para ver a ordem de ligação biblioteca actual, siga estes passos:
No Project menu, clique em definições .
Na vista De definições da caixa de diálogo Definições do Project , clique para seleccionar a configuração de projecto que estiver a obter os erros de ligação.
No separador ligação , escreva /verbose: lib nas Opções do Project caixa.
Reconstrua o projecto. As bibliotecas serão listadas na janela de resultados durante o processo de ligação.
Ao utilizar as bibliotecas MFC, certifique-se de que estão ligados antes da biblioteca de CRT está ligada. Pode fazê-lo certificando-se de que todos os ficheiros do projecto inclui Msdev\Mfc\Include\Afx.h primeiro, directamente (# include <Afx.h>) ou indirectamente (# include <Stdafx.h>). O Afx.h incluem ficheiro força pela ordem correcta das bibliotecas, usando a diretiva de comentário (lib, "<libname>") # Pragma.
Se o ficheiro de origem tiver uma extensão .c ou o ficheiro tem uma extensão .cpp mas não utiliza MFC, pode criar e incluir um cabeçalho pequeno ficheiro (Forcelib.h) na parte superior do módulo. Este novo cabeçalho garante que a ordem de procura thelibrary está correcto.
Visual C++ não contém este ficheiro de cabeçalho. Para criar este ficheiro, siga estes passos:
Abra Msdev\Mfc\Include\Afx.h.
Seleccione as linhas entre #ifndef _AFX_NOFORCE_LIBS e #endif / /! _AFX_NOFORCE_LIBS.
Copie a selecção para a área de transferência do Windows.
Crie um novo ficheiro de texto.
Cola o conteúdo da área de transferência para este novo ficheiro.
Guarde o ficheiro como Msdev\Mfc\Include\Forcelib.h.
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: 148652
(http://support.microsoft.com/kb/148652/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.