LINUX.ORG.RU

boost::gregorian::greg_month::as_short_string() const — не находится при линковке


0

0

Версия boost-а — 1.43.0, собираю под виндоузом, bjam-у задаю конфигурацию minimal. Создаются библиотеки libboost_date_time-mgw44-mt-1_43.a и libboost_date_time-mgw44-mt-d-1_43.a, но при попытке собрать пример, наподобие

#include <string>
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
//---------------------------------------------------------------------
int main(int argc,char** argv)
{
 boost::gregorian::date now(boost::gregorian::day_clock::local_day());
 std::cout<<boost::gregorian::to_iso_string(now)<<std::endl;
 return 0;
}

линкер ругается на 'undefined reference to `boost::gregorian::greg_month::as_short_string() const". В интернетах куча советов по этому поводу, но ни один не помог. Самое обидное, что на codepad.org этот пример всё же заводится. Значит, решение есть? Кто сталкивался, подскажите, что можно сделать для исправления ситуации?

Ответ на: комментарий от namezys

В смысле? Подключается — другие функции из неё работают-то. Я в исходники boost-а полез, так там вообще не нашёл реализации этой самой as_short_string(). Объявления есть, точки использования есть, а реализации — нет.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum
nm /usr/lib/libboost_date_time.so |grep as_short_string
000000000000a4f0 T _ZNK5boost9gregorian10greg_month15as_short_stringEv
000000000000fe40 T _ZNK5boost9gregorian12greg_weekday15as_short_stringEv

Линкуйте с -lboost_date_time.

anon_666
()

>собираю под виндоузом

А, млин, тогда сорри.

anon_666
()
Ответ на: комментарий от anon_666

D:\bin\Qt\2010.04\mingw\lib>nm .\libboost_date_time-mgw44-mt-1_43.a | grep as_short_string
00000044 T __ZNK5boost9gregorian10greg_month15as_short_stringEv
00000000 T __ZNK5boost9gregorian12greg_weekday15as_short_stringEv

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от anon_666

В том то и печаль, что символы, вроде, есть в библиотеке, а толку — ноль.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

А что нужно? Потому что если нужно правильно считать даты и интервалы, то оно вроде работает. А если нужен форматированные ввод-вывод, то буст неприменим вообще. Элементарное «Thu Jul 29 12:37:34 MSD 2010» он ни парсить ни выводить не в состоянии, попытки добиться этого привели к еботне с facet, трате времени и fruuuuuuuстрации.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> Элементарное «Thu Jul 29 12:37:34 MSD 2010» он ни парсить ни выводить не в состоянии

Ты только про date_time говоришь? А если подключить те-же xpressive, Spirit?

В общем то, мне особых наворотов от date_time и не нужно, непонятно само поведение этой «исчезнувшей» функции, которая as_short_string().

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

>> Элементарное «Thu Jul 29 12:37:34 MSD 2010» он ни парсить ни выводить не в состоянии

Ты только про date_time говоришь? А если подключить те-же xpressive, Spirit?

От спирита один шаг до машинистки, которая будет парсить дату глазами. Всё-таки библиотека под названием «date_time» стандартный формат должна уметь парсить сама.

Возвращаяясь к исходному вопросу, а ты «gcc ... -lboost_date_time» не забыл?

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> «gcc ... -lboost_date_time» не забыл?

Вот чего не забыл, так это библиотеку прилинковать. :-) Другие-то функции из неё работают...

one_more_hokum ★★★
() автор топика

Вопрос закрыт. Виноватым, как обычно, оказался я, а не boost. :-)

Всего-то надо было прописать -lboost_date_time после -o <exefilename>, как всё отличным образом скомпилировалось, и заработало.

one_more_hokum ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.