2016-04-06 2 views
1

Я пытаюсь использовать log4cplus в качестве регистратора в своем проекте. Я загрузил и скомпилировал log4cplus в VS2013 как «Debug_Unicode», так и «Release_Unicode» успешно (проект успешно компилируется в Release and Debug).log4cplus нерешенный внешний символ LNK2001

В моей 'Project Properties-> Конфигурация Свойства' Я добавил:

  1. 'log4cplus \ включают' к '/ C++ C -> Все Настройки-> Дополнительные каталоги включения'
  2. «log4cplus \ msvc10 \ Win32 \ obj.log4cplus.Release_Unicode»к ' Linker-> Все Options-> Дополнительная каталогов библиотек'
  3. 'log4cplusu.lib' в 'Linker-> Все Options-> Дополнительные зависимости'

Я также убедился, что я использую ту же библиотеку времени выполнения, в моем случае многопоточную DLL (/ MD), как в проекте log4cplus, так и в моем собственном проекте.

Но когда я пытаюсь построить мой проект я получаю следующие ошибки ссылка:

error LNK2001: unresolved external symbol "class 
std::basic_ostringstream<char,struct std::char_traits<char>,class 
std::allocator<char> > & __cdecl 
log4cplus::detail::get_macro_body_oss(void)" 
([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) 

error LNK2001: unresolved external symbol "void __cdecl 
log4cplus::detail::macro_forced_log(class log4cplus::Logger const 
&,int,class std::basic_string<char,struct std::char_traits<char>,class 
std::allocator<char> > const &,char const *,int,char const *)" 
([email protected]@[email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 

fatal error LNK1120: 2 unresolved externals 
+0

Я столкнулся с аналогичной проблемой с Qt, где следующая ссылка имела подходящее решение для меня: http://stackoverflow.com/questions/14170770/unresolved-external-symbol-public-virtual-struct-qmetaobject-const-thiscal Конечно, взлом Q_OBJECT не будет работать ... – stefaanv

ответ

2

под управлением Windows UNICODE сборка построена с TCHAR и т.д. определяется как wchar_t и т.д. Когда не строится с UNICODE, определяемым как сборка с TCHAR, определяемая как char и т. д.

Строительство одного библиотека с UNICODE определена и пытается связать ее в проекте, где UNICODE не определен, приведет к ошибкам компоновщика, поскольку в определении TCHAR будет несоответствие; char - wchar_t.

Чтобы исправить это, создайте все необходимые библиотеки и проекты с последовательным определением UNICODE_UNICODE).

Это можно сделать либо с помощью;

#define UNICODE 
#define _UNICODE 

Или в настройках проекта;

Свойства проекта> Общие> Значения по умолчанию Project> Набор символов

Или в командной строке;

/DUNICODE /D_UNICODE 

Альтернатива применим также, если UNICODE не предназначен для использования, убедитесь, что определяет не установлены, и/или установка мульти-символ используется в проектах и ​​последовательно применяется.

Не забудьте также быть последовательными между сборками «Release» и «Debug».

+0

мой проект log4cplus имеет свойство «Набор символов» для «Использовать набор символов Unicode» в моих конфигурациях Release_Unicode и Debug_Unicode, которые являются конфигурациями, используемыми для создания моего проекта. Ошибки связи все еще появляются. Есть ли что-то, что я могу потерять? –

+1

Установлены ли они во всех проектах? Как-то 'UNICODE' не задается в проекте, давая ошибку компоновщика (или он не задан). Учитывая определения для log4cplus :: tostringstream и get_macro_body_oss() 'и' typedef std :: basic_ostringstream tostringstream; ',' tchar' зависит от 'UNICODE'; '#if defined (UNICODE) \ n typedef wchar_t tchar;'. По-прежнему выглядит, как библиотека журнала была построена с помощью набора UNICODE, и ваш проект не настроен. – Niall

+1

Ваше право, мой проект был настроен на Multi-Character, это потому, что я использую Pantheios, который настроен на Multi-Character. Я изменил проект log4cplus на настройки на Multi-Character, скомпилировал его успешно, обновил дополнительные библиотеки «Дополнительные библиотеки» моих проектов и «Дополнительные зависимости» в узле Linker, и теперь все компилируется, как ожидалось. Благодаря! –

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