Я хочу создать UNICODE dll использовать log4cplus
в Окно 10 Visual Studio 2017 Community с UNICODE набором символов.Я пробую следующие шаги:
Создайте log4cplus
с режимом Debug_unicode
и получите lib: log4cplusSUD.lib
, log4cplusUD.lib
и log4cplusUD.dll
Создание проекта в формате UNICODE dll, обернутого log4cplus
в Сообщество Visual Studio 2017 .Я добавляю Свойства проекта-> Свойства конфигурации с:
log4cplus/include
в C / C ++ -> Все параметры-> Дополнительные каталоги включения log4cplus-1.1.2\msvc10\x64\bin.Debug_Unicode
до Linker-> Все параметры-> Дополнительные каталоги библиотек log4cplusUD.lib
до Linker-> Все параметры-> Дополнительные зависимости
Вот код:
// log.h
#pragma once
#include "stdafx.h"
#include <log4cplus/tstring.h>
#define LOG_LIB __declspec(dllexport)
LOG_LIB bool initialize(const log4cplus::tstring &progress_name,
const log4cplus::tstring &config_file =
log4cplus::tstring());
// log.cpp
#include "log.h"
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <log4cplus/config.hxx>
#include <log4cplus/configurator.h>
#include <log4cplus/thread/threads.h>
#include <log4cplus/streams.h>
#include <log4cplus/tchar.h>
#include <log4cplus/layout.h>
#include <log4cplus/fileappender.h>
bool initialize(const log4cplus::tstring &progress_name,
const log4cplus::tstring &config_file)
{
try {
/* Initialize log4cplus first. It's NOT necessary on Linux */
log4cplus::initialize();
/* Configure */
if (!config_file.empty()) {
log4cplus::PropertyConfigurator::doConfigure(config_file);
}
}
catch (...) {
log4cplus::tcerr << LOG4CPLUS_TEXT("Failed to initialize log4cplus!") << std::endl;
return false;
}
return true;
}
После создания проекта я получаю Неразрешенная ошибка символа :
log.obj : error LNK2001: unresolved external symbol "class std::basic_ostream<wchar_t,struct std::char_traits<wchar_t> > & log4cplus::tcerr" (?tcerr@log4cplus@@3AEAV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@EA)
Я использую dumpbin.exe log4cplusUD.dll
, я могу получить символ:
?tcerr@log4cplus@@3AEAV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@EA (class std::basic_ostream<wchar_t,struct std::char_traits<wchar_t> > & log4cplus::tcerr)
Если я ссылаюсь на log4cplusSUD.lib
, он работает нормально!!!!Так где я допустил ошибку?