Perché il mio Visual C ++ accumulo progetto exe creare e file .exp Lib?
-
26-09-2019 - |
Domanda
Ho una soluzione che consiste di 3 progetti. Uno è una libreria statica, e due sono file exe basate su console che dipendono e il collegamento con questa libreria. Le loro impostazioni sembrano identici. Costruisco uno di loro:
1> ------ Corporatura avviato: Progetto: masksample, Configurazione: Debug Win32 ------
1> Compilazione ...
1> Stdafx.cpp
1> Compilazione ...
1> masksample.cpp
1> Compilazione manifesto a risorse ...
1> Collegamento ...
1> LINK: C: \ Users \ DarekSz \ Praca \ cci \ Debug \ masksample.exe non trovato o no costruito da l'ultimo anello incrementale; l'esecuzione completa di collegamento
1> Embedding manifesta ...
1> masksample - 0 errore (s), 0 warning (s)
========== Corporatura: 1 riuscito, 0 fallito, 1 up-to-date, 0 saltato ==========
Poi vado a costruire l'altro:
1> ------ Corporatura avviato: Progetto: calibsample, Configurazione: Debug Win32 ------
1> Compilazione ...
1> Stdafx.cpp
1> Compilazione ...
1> calibsample.cpp
1> Compilazione manifesto a risorse ...
1> Collegamento ...
1> LINK: C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exe non trovato o no costruito da l'ultimo anello incrementale; l'esecuzione completa di collegamento
1> Creazione della libreria C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.lib e oggetto C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exp
1> Embedding manifesta ...
1> calibsample - 0 errore (s), 0 warning (s)
========== Corporatura: 1 riuscito, 0 fallito, 1 up-to-date, 0 saltato ==========
Perché il linker creare il lib e file .exp questa volta? C'è qualche possibilità di attivare questa funzione ea riposo che ho attivato senza sapere su di esso?
Soluzione
E 'un po' tardi, ma, forse qualcun altro potrebbe trovare utile questo suggerimento.
A proposito io non sono un guru di C ++ ...
Nella mia soluzione che ho 3 progetti. Uno è un progetto DLL, gli altri sono due progetti app Win32 che fanno riferimento al progetto dll.
Di solito, con la DLL costruito, si hanno anche alcuni altri file generato (.exp, lib) anche per i progetti non dll. Questo può occour quando si include un file .h del progetto dll, nel progetto app, che contiene una classe contrassegnata con __declspec (dllexport).
Per evitare il linker pensate che il vostro stanno cercando di includere alcuni file .h "esportare" usare un'espressione condizionale per definire la macro _declspec.
Esempio:
#if defined(_DO_NOT_EXPORT)
#define DllExport
#else
#define DllExport __declspec(dllexport)
#endif
Ok, diciamo che avete un MyClass.h nel progetto dll.
nel file .h si potrebbe avere ora:
class DllExport MyClass {
...
}
Quando si desidera includere questo file .h in un progetto NON dll, è sufficiente per definire la condizione _DO_NOT_EXPORT
#define _DO_NOT_EXPORT
#include "MyClass.h"
Altri suggerimenti
Questo è normale se una o più funzioni è / sono esportati dal vostro eseguibile.