Неразрешенный символ log4cplus :: tcerr ошибка, когда dll использует log4cplus в Windows UNICODE - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу создать UNICODE dll использовать log4cplus в Окно 10 Visual Studio 2017 Community с UNICODE набором символов.Я пробую следующие шаги:

  1. Создайте log4cplus с режимом Debug_unicode и получите lib: log4cplusSUD.lib, log4cplusUD.lib и log4cplusUD.dll

  2. Создание проекта в формате 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, он работает нормально!!!!Так где я допустил ошибку?

...