2013-09-16 9 views
5

Ho scaricato e compilato log4cplus in VS2012. La compilazione andava bene (sia il debug che il rilascio) Ho provato ad usarlo il mio codice ma ottengo 3 errori di collegamento, niente di quello che ho provato non li ha rimossi. sto usando lo stesso include dal progetto log4cplus, e le librerie che ho compilato (provato tutti e 3 ... rilascio di debug e il log4cplusS.liberrori di collegamento log4cplus quando utilizzato in VS2012

ho ancora ottenere questi:

errore LNK2019: simbolo esterno non risolto "__declspec (dllimport) classe std :: basic_ostringstream, classe std :: allocator> & __cdecl log4cplus :: dettaglio :: get_macro_body_oss (void)" (_ imp get_macro_body_oss @ @ dettaglio log4cplus @ @YAAAV? $ Basic_ostringstream @ _WU? $ Char_traits @ _W @ std @@ V? $ Allocatore @ _W @ 2 std @@ XZ) fa riferimento in funzione int" __cdecl Preparare (classe std :: basic_string, classe std :: allocator> &, classe std :: basic_string, classe std :: allocator> &, classe std :: basic_string, classe std: : allocator> &, int *, int *, int *) " (? Prepara @@ YAHAAV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocatore @ D @ 2 @@ std @@ 00PAH11 @Z)

errore LNK2019: simbolo esterno non risolto "__declspec (dllimport) pubblico: classe statica log4cplus :: Logger __cdecl log4cplus :: Logger :: getInstance (classe std :: basic_string, classe std :: allocator> const &) " (imp? GetInstance @ Logger @ log4cplus @@ SA? AV12 @ ABV? $ Basic_string @ _WU? $ Char_traits @ _W @ std @@ V? $ Allocatore @ _W @ 2 std @@@ Z) fa riferimento in funzione "int __cdecl Preparare (classe std :: basic_string, classe std :: allocator> &, classe std :: basic_string, classe std :: allocator> &, classe std :: basic_string, classe std :: allocatore> &, int *, int *, int *) " (? Prepara @@ YAHAAV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocatore @ D @ 2 @@ std @@ 00PAH11 @ Z)

Cosa c'è che non va?

Il mio codice è semplice, a mio dll cpp:

nella parte superiore del cpp ho aggiunto

static Logger logger; 

in una delle funzioni che ho aggiunto:

logger = Logger::getInstance(LOG4CPLUS_TEXT("MyDLL")); 
LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Prepare Starts")); 

risposta

6

E ' è probabile che tu abbia compilato log4cplus usando la configurazione Release. È necessario utilizzare Release_Unicode (analogamente per la configurazione Debug).

+0

Hai ragione .... ma perché? – Dani

+1

Dal momento che Visual Studio 2010 (credo), tutti i nuovi progetti vengono creati con 'TCHAR' come' wchar_t' (impostazione Unicode nel gruppo di impostazioni generali). Questa impostazione definisce i simboli del preprocessore 'UNICODE' e' _UNICODE'. Questi simboli sono usati anche da log4cplus. Se vuoi assolutamente disabilitarlo, puoi, ma ti suggerirei di farlo contro tutto ciò che non è un progetto di giocattoli. – wilx

+0

Sì, ho usato la versione Unicode, potrei averne bisogno comunque ... non per il log ma per il resto del progetto ... – Dani