2010-05-12 24 views
12

Ho una soluzione composta da 3 progetti. Uno è una libreria statica e due sono file .exe basati su console che dipendono e si collegano a questa libreria. Le loro impostazioni sembrano identiche. Costruisco uno di loro:Perché il mio progetto Visual C++ .exe crea file .lib e .exp?

1> ------ Costruire iniziato: 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 non creato dall'ultimo collegamento incrementale; l'esecuzione completa di collegamento
1> Incorporare manifesta ...
1> masksample - 0 errore (s), 0 warning (s)
========== Corporatura: 1 riuscito, 0 fallito, 1 up-to-date, 0 saltati ==========

Poi vado a costruire l'altro:

1> ------ costruire iniziato: 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 non creato dall'ultimo collegamento incrementale; eseguire il collegamento completo
1> Creazione libreria C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.lib e oggetto C: \ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exp
1> Incorporamento manifest. ..
1> calibsample - 0 error (s), 0 warning (s)
========== Build: 1 riuscito, 0 fallito, 1 aggiornato, 0 saltato == ========

Perché il linker crea i file .lib e .exp questa volta? C'è qualche opzione per attivare e disattivare questa funzione che ho attivato senza saperlo?

risposta

16

È un po 'tardi ma forse qualcun altro potrebbe trovare utile questo suggerimento.

BTW io non sono un guru C++ ...

Nella mia soluzione che ho 3 progetti. Uno è un progetto dll, gli altri due progetti di app Win32 che fanno riferimento al progetto dll.

Di solito, con la tua DLL compilata, hai anche qualche altro file generato (.exp, .lib) anche per i progetti NON dll. Può accadere quando si include un file .h del progetto dll nel progetto dell'app, che contiene una classe contrassegnata con __declspec (dllexport).

Per evitare che il linker pensi che stiate cercando di includerne alcuni.h i file da "esportare" utilizzano 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" 
+0

Grazie mille per questo input! – neuviemeporte

+1

Oh sì, ho dimenticato di farlo nel mio progetto ... grazie per la risposta –

+0

bello! così utile. – Yves

2

Ciò è normale se una o più funzioni sono/vengono esportate dal file eseguibile.

+0

Cosa significa esportare le funzioni da un eseguibile? – neuviemeporte

+0

Proprio come si esportano le funzioni da una DLL, è anche possibile esportarle da un file eseguibile. –

+1

Non riesco a vedere come il mio eseguibile esporti delle funzioni. È contenuto in main() nella sua interezza. – neuviemeporte

Problemi correlati