在Windows UNICODE中dll使用log4cplus时出现无法解析的符号log4cplus :: tcerr错误

时间:2018-12-10 04:31:54

标签: c++ dll unicode log4cplus

我想使用 UNICODE 字符集在 Window 10 Visual Studio 2017社区上使用System.out创建一个 UNICODE dll 。我尝试执行以下步骤:

  1. log4cplus模式构建log4cplus,并获取lib:Debug_unicodelog4cplusSUD.liblog4cplusUD.lib

  2. 创建一个由 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) ,就可以正常工作!!!!那我在哪里弄错了?

0 个答案:

没有答案