Установка boost.log (Windows 7 с использованием codeblocks 12.11+gcc 4.7.1)

Я пытаюсь собрать и запустить библиотеку 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. Должен ли я что-то с этим делать?
  • Что делать с полученной ошибкой?

Спасибо за помощь.


person Arkady    schedule 25.12.2012    source источник
comment
Я попробовал пример использования потока boost и получил ту же проблему с неопределенной ссылкой. Итак, я решил, что мой буст-билд был неправильным. С nuwen.net/mingw.html я скачал gcc 4.7.2 с уже установленным boost (у него 26 библиотек, так что моя компиляция с 52 (один релиз, одна отладка) была правильной). И я скопировал этот новый каталог MinGW поверх существующих внутренних кодовых блоков. И снова попробовал повысить пример потока. И ОПЯТЬ получил эту ошибку неопределенной ссылки! =( Почему сейчас? Я обнаружил, что это может произойти, если нет ссылки на библиотеку времени выполнения C. Может ли это быть проблемой?   -  person Arkady    schedule 25.12.2012


Ответы (1)


Я не вижу, чтобы у вас была библиотека журналов в списке, который вы применили выше. Неопределенная ссылка означает, что ваш компоновщик не может найти ни одной подходящей функции во всех предоставленных вами библиотеках.

Похоже, вы пропустили сборку библиотеки журналов повышения, а также получили сообщение от компоновщика, который не может найти библиотеку.

person Arnestig    schedule 20.07.2013