2013-09-16 3 views
5

Я загрузил и скомпилировал log4cplus в VS2012. Компиляция была прекрасная (как отладка, так и релиз) Я попытался использовать его в своем коде, но я получаю 3 ошибки ссылок, ничего не пробовал, не удалял их. Я использую то же включает в себя от проекта log4cplus, и ЛИЭС я скомпилированный (пробовал все 3 ... релиз отладки и log4cplusS.liblog4cplus ошибки связи при использовании в VS2012

Я все еще получаю эту:

ошибки LNK2019: неразрешенный внешний символ "__declspec (DllImport) класс станд :: basic_ostringstream, класс станд :: распределитель> & __cdecl log4cplus :: подробнее :: get_macro_body_oss (аннулируются)" (_ имп get_macro_body_oss @ подробно @ log4cplus @ @YAAAV? $ Basic_ostringstream @ _WU? $ Char_traits @ _W @ std @@ V? $ Allocator @ _W @ 2 @@ std @@ XZ) ссылка в функции «ИНТ __cdecl Подготовка (класс станд :: basic_string, класс станд :: Распределитель> &, класс станд :: basic_string, класс станд :: Распределитель> &, класс станд :: basic_string, класс станд: : allocator> &, int *, int *, int *) " (? Подготовить @@ YAHAAV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ 00PAH11 @Z)

ошибка LNK2019: неразрешенный внешний символ «__declspec (DllImport) общественности: статический класс log4cplus :: Logger __cdecl log4cplus :: Logger :: деЫпзЬапсе (класс станд :: basic_string, класс станд :: распределитель> Const &) " (_ imp? GetInstance @ Logger @ log4cplus @@ SA? AV12 @ ABV? $ Basic_string @ _WU? $ Char_traits @ _W @ std @@ V? $ Allocator @ _W @ 2 @@ std @@@ Z) ссылка в функции «ИНТ __cdecl Подготовка (класс станд :: basic_string, класс станд :: распределитель> &, класс станд :: basic_string, класс станд :: распределитель> &, класс станд :: basic_string, класс станд :: allocator> &, int *, int *, int *) " (? Подготовить @@ YAHAAV? $ basic_string @ DU? $ char_traits @ D @ std @@ V? $ allocator @ D @ 2 @@ std @@ 00PAH11 @ Z)

Что не так?

Мой код прост, в моей длл CPP:

в верхней части CPP я добавил

static Logger logger; 

в одном из функции я добавил:

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

ответ

6

It вероятно, вы скомпилировали log4cplus, используя конфигурацию Release. Вам нужно будет использовать Release_Unicode (аналогично для конфигурации Debug).

+0

Вы правы .... но почему? – Dani

+1

Поскольку Visual Studio 2010 (я считаю), все новые проекты создаются с помощью 'TCHAR' как' wchar_t' (параметр Unicode в группе общих настроек). Этот параметр определяет символы препроцессора 'UNICODE' и' _UNICODE'. Эти символы также используются log4cplus. Если вы абсолютно хотите отключить это, вы можете, но я предлагаю против этого для всего, что не является игрушечным проектом. – wilx

+0

Да, я использовал версию юникода, мне это может понадобиться ... не для журнала, а для остальной части проекта ... – Dani

Смежные вопросы