Я пытаюсь собрать и запустить библиотеку Boost.Log на CodeBlocks 12.11. У меня нет опыта работы с boost и boost.log, и я хочу изучить его, поэтому сначала мне нужно его установить.
Установка буста
Сначала я следовал шагам как установить boost с помощью кодовых блоков.
В результате на двух разных компьютерах (на обоих Windows 7) я получил разный список файлов в %mypath%\boost\lib (на одном компьютере было всего 6 файлов, на другом 52)
Большой список:
- libboost_chrono-mgw47-mt-1_52.a
- libboost_chrono-mgw47-mt-d-1_52.a
- libboost_date_time-mgw47-mt-1_52.a
- libboost_date_time-mgw47-mt-d-1_52.a
- libboost_exception-mgw47-mt-1_52.a
- libboost_exception-mgw47-mt-d-1_52.a
- libboost_filesystem-mgw47-mt-1_52.a
- libboost_filesystem-mgw47-mt-d-1_52.a
- libboost_graph-mgw47-mt-1_52.a
- libboost_graph-mgw47-mt-d-1_52.a
- libboost_iostreams-mgw47-mt-1_52.a
- libboost_iostreams-mgw47-mt-d-1_52.a
- libboost_locale-mgw47-mt-1_52.a
- libboost_locale-mgw47-mt-d-1_52.a
- libboost_math_c99-mgw47-mt-1_52.a
- libboost_math_c99-mgw47-mt-d-1_52.a
- libboost_math_c99f-mgw47-mt-1_52.a
- libboost_math_c99f-mgw47-mt-d-1_52.a
- libboost_math_c99l-mgw47-mt-1_52.a
- libboost_math_c99l-mgw47-mt-d-1_52.a
- libboost_math_tr1-mgw47-mt-1_52.a
- libboost_math_tr1-mgw47-mt-d-1_52.a
- libboost_math_tr1f-mgw47-mt-1_52.a
- libboost_math_tr1f-mgw47-mt-d-1_52.a
- libboost_math_tr1l-mgw47-mt-1_52.a
- libboost_math_tr1l-mgw47-mt-d-1_52.a
- libboost_prg_exec_monitor-mgw47-mt-1_52.a
- libboost_prg_exec_monitor-mgw47-mt-d-1_52.a
- libboost_program_options-mgw47-mt-1_52.a
- libboost_program_options-mgw47-mt-d-1_52.a
- libboost_random-mgw47-mt-1_52.a
- libboost_random-mgw47-mt-d-1_52.a
- libboost_regex-mgw47-mt-1_52.a
- libboost_regex-mgw47-mt-d-1_52.a
- libboost_serialization-mgw47-mt-1_52.a
- libboost_serialization-mgw47-mt-d-1_52.a
- libboost_signals-mgw47-mt-1_52.a
- libboost_signals-mgw47-mt-d-1_52.a
- libboost_system-mgw47-mt-1_52.a
- libboost_system-mgw47-mt-d-1_52.a
- libboost_test_exec_monitor-mgw47-mt-1_52.a
- libboost_test_exec_monitor-mgw47-mt-d-1_52.a
- libboost_thread-mgw47-mt-1_52.a
- libboost_thread-mgw47-mt-d-1_52.a
- libboost_timer-mgw47-mt-1_52.a
- libboost_timer-mgw47-mt-d-1_52.a
- libboost_unit_test_framework-mgw47-mt-1_52.a
- libboost_unit_test_framework-mgw47-mt-d-1_52.a
- libboost_wave-mgw47-mt-1_52.a
- libboost_wave-mgw47-mt-d-1_52.a
- libboost_wserialization-mgw47-mt-1_52.a
- libboost_wserialization-mgw47-mt-d-1_52.a
Он был установлен с сообщением bjam:
...failed updating 10 targets...
...skipped 16 targets...
...updated 764 targets...
Этот список полный, или при установке boost я пропустил некоторые библиотеки? Почему два разных компьютера могут давать разные результаты при одних и тех же действиях (я два раза выполнял одни и те же шаги по ссылке)? (Компьютер с 6 библиотеками результатов не имел VC2010, комп с 52 библиотеками имел VC2010, может быть причина в этом?)
Установка boost.log
Затем на машине с 52 библиотеками я начал устанавливать boost.log, следуя шагам из как установить boost.log
И получил две дополнительные библиотеки:
- libboost_log_setup-mgw47-mt-1_52.a (размер 22733 КБ)
- libboost_log_setup-mgw47-mt-d-1_52.a (размер 74933 КБ)
со следующим сообщением результата от bjam:
...failed updating 6 targets...
...skipped 10 targets...
...updated 225 targets...
Затем я взял образец из дистрибутива boost.log:
#include <iostream>
//#define BOOST_LOG_DYN_LINK
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/log/common.hpp>
#include <boost/log/formatters.hpp>
#include <boost/log/filters.hpp>
#include <boost/log/utility/init/to_file.hpp>
#include <boost/log/utility/init/to_console.hpp>
#include <boost/log/utility/init/common_attributes.hpp>
#include <boost/log/attributes/timer.hpp>
namespace logging = boost::log;
namespace fmt = boost::log::formatters;
namespace flt = boost::log::filters;
namespace sinks = boost::log::sinks;
namespace attrs = boost::log::attributes;
namespace src = boost::log::sources;
namespace keywords = boost::log::keywords;
using boost::shared_ptr;
int main(int argc, char* argv[])
{
logging::init_log_to_console(std::clog, keywords::format = "%TimeStamp%: %_%");
logging::add_common_attributes();
src::logger lg;
BOOST_LOG(lg) << "Hello, World!";
return 0;
}
Добавлены библиотеки в проект (и путь к включенным файлам): также libboost_log_setup-mgw47-mt-d-1_52.a
но при компиляции получаю ошибки:
obj\Debug\main.o||In function 'ZN5boost10log_mt_nt57sources12basic_loggerIcNS1_6loggerENS1_19single_thread_modelEED2Ev':|
C:\Program Files (x86)\CodeBlocks\include\boost-1_52\boost\log\sources\basic_logger.hpp|88|undefined reference to `boost::log_mt_nt5::basic_attribute_set<char>::~basic_attribute_set()'|
И не знаю, как их решить.
Пожалуйста, объясните мне (если можно):
- Как я могу узнать, что моя сборка/установка boost была заполнена, и что делать, если это не так (я уверен, что установка, которая дала мне 6 библиотек, не была полной, но я не знаю, что с этим делать)?
- Как я могу узнать, что моя компиляция boost.log заполнена?
- Я читал, что мне нужно собрать boost.lib как общий объект, но libs был в подкаталоге link-static, несмотря на команду runtime-link=shared для bjam. Должен ли я что-то с этим делать?
- Что делать с полученной ошибкой?
Спасибо за помощь.