我想使用 UNICODE 字符集在 Window 10 Visual Studio 2017社区上使用System.out
创建一个 UNICODE dll 。我尝试执行以下步骤:
以log4cplus
模式构建log4cplus
,并获取lib:Debug_unicode
,log4cplusSUD.lib
和log4cplusUD.lib
创建一个由 Visual Studio 2017社区包装的log4cplusUD.dll
的UNICODE dll项目。我将 Project Properties-> Configuration Properties 添加为:
log4cplus
到 C / C ++->所有选项->其他包含目录 log4cplus/include
到 Linker->所有选项->其他库目录 log4cplus-1.1.2\msvc10\x64\bin.Debug_Unicode
到 Linker->所有选项->其他依赖项 这是代码:
log4cplusUD.lib
构建项目后,出现未解决的符号错误:
// 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)
,就可以正常工作!!!!那我在哪里弄错了?