Pergunta

Eu tenho uma solução composta por 3 projetos. Um é uma biblioteca estática e dois são arquivos .exe baseados em console que dependem e vinculam-se a esta biblioteca. Suas configurações parecem ser idênticas. Eu construo um deles:

1> ------ Build Iniciado: Projeto: MASCASSPLE, CONFIGURAÇÃO: Debug Win32 ------
1> Compilar ...
1> stdafx.cpp
1> Compilar ...
1> MaskSample.cpp
1> Compilar manifesto aos recursos ...
1> Linking ...
1> Link: C: Usuários Dareksz Praca CCI Debug MaskSample.exe não encontrado ou não foi construído pelo último link incremental; realizando link completo
1> Manifesto de incorporação ...
1> máscara - 0 Erro (s), 0 aviso (s)
========== Build: 1 consegui, 0 falhou, 1 atualizado, 0 ignorado ===========

Então eu continuo construindo o outro:

1> ------ Build Iniciado: Projeto: Calibsample, Configuração: Debug Win32 ------
1> Compilar ...
1> stdafx.cpp
1> Compilar ...
1> calibsample.cpp
1> Compilar manifesto aos recursos ...
1> Linking ...
1> Link: C: Usuários Dareksz Praca CCI Debug Calibsample.exe não encontrado ou não foi construído pelo último link incremental; realizando link completo
1> Criação da biblioteca C: Users Dareksz Praca CCI Debug Calibsample.lib e Objeto C: Usuários Dareksz Praca Cci Debug Calibsample.exp
1> Manifesto de incorporação ...
1> calibsample - 0 Erro (s), 0 aviso (s)
========== Build: 1 consegui, 0 falhou, 1 atualizado, 0 ignorado ===========

Por que o vinculador cria os arquivos .lib e .exp desta vez? Existe alguma opção para ativar e desligar que eu ativei sem saber sobre isso?

Foi útil?

Solução

É um pouco tarde, mas talvez alguém possa achar útil essa dica.

Btw eu não sou um guru C ++ ...

Na minha solução, tenho 3 projetos. Um é um projeto de DLL, os outros são dois projetos de aplicativos Win32 que referenciam o projeto DLL.

Geralmente, com sua DLL construída, você também tem outros arquivos gerados (.exp, .lib) também para os projetos não DLL. Isso pode ocorrer quando você inclui um arquivo .h do projeto DLL, no projeto do aplicativo, que contém uma classe marcada com __declspec (dllexport).

Para evitar o vinculador, pense que você está tentando incluir alguns arquivos .h para "exportar", use uma expressão condicional para definir sua macro _declspec.

Exemplo:

#if defined(_DO_NOT_EXPORT)
#define DllExport  
#else
#define DllExport __declspec(dllexport)
#endif

Ok, digamos que você tenha um myclass.h em seu projeto DLL.

No seu arquivo .h que você poderia ter agora:

class DllExport MyClass {
 ...
}

Quando você deseja incluir este arquivo .h em um projeto não DLL, basta definir a condição _do_not_export

#define _DO_NOT_EXPORT
#include "MyClass.h"

Outras dicas

Isso é normal se uma ou mais funções forem/forem exportadas do seu executável.

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