janardhan2104 Ответов: 2

Как написать код boost logger для работы с несколькими зависимыми проектами на C++


<pre lang="c++"><pre lang="c++">
I wrote Smaple Boost logger code,when i compiled this code,only .DLL file Created,but .Lib is not generated,can anyone help me,how to generate .Lib for this code to work Multi dependency projects.
 Project 1 contain Two file Logger.h and Logger.cpp
---------------------------------------------
 Sample Code 
-----------------
Logger.h
------
<pre>#pragma once
#include<crtdefs.h>
#include<boost/log/expressions.hpp>
#include<boost/log/expressions/formatters/named_scope.hpp>
#include<boost/log/sources/global_logger_storage.hpp>
#include<boost/log/support/date_time.hpp>
#include<boost/log/trivial.hpp>
#include<boost/log/utility/setup.hpp>
#include<string.h>
#include"Binary_Export.h"

#include <boost/log/sinks/debug_output_backend.hpp>
#define FILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)
#define INFO   BOOST_LOG_SEV ( my_logger::get(), boost::log::trivial::info) << "|" << FILE<< "| " <<" "<<"|"<< __LINE__ << "| "<<__FUNCSIG__

#define WARN  BOOST_LOG_SEV( my_logger::get(), boost::log::trivial::warning) <<  "|" << FILE<< "| " <<" "<<"|"<< __LINE__ << "| "<<__FUNCSIG__
#define ERROR BOOST_LOG_SEV(my_logger::get(), boost::log::trivial::error) <<  "|" << FILE<< "| " <<" "<<"|"<< __LINE__ << "| "<<__FUNCSIG__

#define SYS_LOGFILE   "C:\\Users\\janardhanreddyn\\Documents\\LogFile\\DLL.log"

//Narrow-char thread-safe logger.
 typedef   boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level>   logger_t;

//declares a global logger with a custom initialization
BOOST_LOG_GLOBAL_LOGGER( my_logger, logger_t);



Logger.Cpp
----------
#include"Simple_Logger.h"
namespace logging = boost::log;
namespace sinks = boost::log::sinks;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace attrs = boost::log::attributes;
namespace keywords = boost::log::keywords;
//Defines a global logger initialization routine
BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, logger_t)
{
	logger_t lg;

	logging::add_common_attributes();

	logging::add_file_log(
		keywords::file_name = SYS_LOGFILE,
		keywords::rotation_size = 1024 * 1024 * 20,    // megabytes
		keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point (0, 0, 0),
		keywords::auto_flush = true,
		keywords::format = (
		expr::stream<<expr::format_date_time <boost::posix_time::ptime> ("TimeStamp", "%d-%m-%y %H:%M:%S")
		<< " [" << expr::attr <boost::log::trivial::severity_level> ("Severity") << "]: "
		<< expr::smessage

		)
		);

	logging::add_console_log(
		std::cout,
		keywords::format = (
		expr::stream <<"|"<< expr::format_date_time <boost::posix_time::ptime> ("TimeStamp", "%d-%m-%y %H:%M:%S")<<"|"
		<< " [" << expr::attr <boost::log::trivial::severity_level> ("Severity") << "]: "
		<< expr::smessage

		)

		);

	logging::core::get()->set_filter
		(
		logging::trivial::severity >= logging::trivial::info
		);

	return lg;
}



Что я уже пробовал:

Когда я использую приведенный выше код в ProjectB, он был сгенерирован .Dll-файл, если я хочу использовать приведенный выше код в projectB, мне нужен .Файл Lib.

Файл Проект Б Winfactory.ч и Win_defination.cpp
---------------------------------------------------
Winfactory.ч
---------------
#include"Factory.h"
#include"tfexports1.h"

class TF_API1 DWinfactory:public AFactory
{
public:
	DWinfactory();
	void Func();



};


Win_defination.cpp


#include"Winfactory.h"
DWinfactory::DWinfactory()
{



}
void DWinfactory:: Func()
{

	INFO<<Derived Func";         //Info used from Project1

}

Suvendu Shekhar Giri

Не Ясно!
В чем именно заключается проблема?

janardhan2104

Привет Шекхар,

Я хочу использовать код projectA в projectB ,я хочу экспортировать код projectA в ProjectB, чтобы генерировать.lib файл, я не знаю, какой из них я должен экспортировать, вы можете мне помочь.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Это выглядит почти так же, как и ваш предыдущий вопрос, опубликованный вчера.
Видеть Пошаговое руководство: создание и использование библиотеки динамических ссылок (C++)[^].


janardhan2104

Привет, Ричард,я написал код ProjectA ,используя сторонние библиотеки, в данном случае, какие вещи я должен экспортировать из projectA в ProjectB.

Richard MacCutchan

Перейдите по ссылке, которую я дал вам выше. Он подробно объясняет, как правильно создать библиотеку DLL.

Рейтинг:
2

Jochen Arndt

Цитата:
Когда я использую приведенный выше код в ProjectB, он был сгенерирован .Dll-файл, если я хочу использовать приведенный выше код в projectB, мне нужен .Файл Lib.
Взгляните на выходную папку вашего проекта DLL. Он должен содержать файлы DLL и LIB.

Затем добавьте имя файла LIB в зависимый проект или используйте
#pragma comment(lib, "lib-file-name")
в одном из ваших исходных файлов (см. комментарий (C-C++)[^]). Путь к файлу lib можно указать явно, добавив его в настройки проекта (Путь к файлу библиотеки), или опустить, когда файл lib копируется в путь, который анализируется для файлов библиотеки.

[РЕДАКТИРОВАТЬ]
Смотреть также Пошаговое руководство: создание и использование библиотеки динамических ссылок (C++)[^] и
Пошаговое руководство: создание и использование статической библиотеки (C++)[^]
[/РЕДАКТИРОВАТЬ]


janardhan2104

Привет Йохену, я думаю, за генерацию .Lib-файл, есть ли у нас экспорт чего-либо из projectA в projectB.В моем проекте .Либ не генеаризирована.

Jochen Arndt

Я не знаю, какую версию VS вы используете, как вы настроили свой DLL-проект и хотите ли вы статическое связывание.

Но я обновил свое решение ссылками MSDN о том, как создавать и использовать библиотеки DLL и LIB-файлы.