Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> -std=C++0x приводик к ошибкам в Boost 
V
    Опции темы
cupper
Дата 21.2.2011, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Компилирую под g++ 4.5.1
Есть код, использую в нем boost thread & mutex. Все прекрасно компилировалось. Решил в одном месте лямбдо выражения, для этого в опции компиляции добавил -std=C++0x. Вылезла куча ошибок, я долго пытался понять откуда они взялись, убрал все что добавлял - ошибки оставались. Потом случайно убрал опцию -std=C++0x и... собралось. 
После чего я вспомнил что в новый стандарт включены свои средства для потоков и объектов синхронизации. Видать с которыми и конфликтует Boost... но на VS2010 у меня это работало, при условии использования лямбдовыражений (я так пологая что там эта опция была включена), а на g++ вылазит куча ошибок

Код

In file included from /usr/include/boost/thread/thread.hpp:22:0,
                 from /usr/include/boost/thread.hpp:13,
                 from main.cpp:5:
/usr/include/boost/thread/detail/thread.hpp: In function ‘boost::thread&& boost::move(boost::thread&&)’:
/usr/include/boost/thread/detail/thread.hpp:349:16: error: invalid initialization of reference of type ‘boost::thread&&’ from expression of type 
‘boost::thread’
In file included from /usr/include/boost/thread/detail/thread_heap_alloc.hpp:17:0,
                 from /usr/include/boost/thread/detail/thread.hpp:13,
                 from /usr/include/boost/thread/thread.hpp:22,
                 from /usr/include/boost/thread.hpp:13,
                 from main.cpp:5:
/usr/include/boost/thread/pthread/thread_heap_alloc.hpp: In function ‘T* boost::detail::heap_new(A1&&) [with T = boost::detail::thread_data<void (*)()>,
 A1 = void (*&)()]’:
/usr/include/boost/thread/detail/thread.hpp:130:95:   instantiated from here
/usr/include/boost/thread/pthread/thread_heap_alloc.hpp:24:47: error: cannot bind ‘void (*)()’ lvalue to ‘void (*&&)()’
/usr/include/boost/thread/detail/thread.hpp:43:13: error:   initializing argument 1 of ‘boost::detail::thread_data<F>::thread_data(F&&) [with F = void (*)
()]’
In file included from /usr/include/boost/thread/pthread/mutex.hpp:11:0,
                 from /usr/include/boost/thread/mutex.hpp:16,
                 from /usr/include/boost/thread/pthread/thread_data.hpp:12,
                 from /usr/include/boost/thread/thread.hpp:17,
                 from /usr/include/boost/thread.hpp:13,
                 from main.cpp:5:
/usr/include/boost/thread/locks.hpp: In member function ‘boost::unique_lock<Mutex>& boost::unique_lock<Mutex>::operator=(boost::unique_lock<Mutex>&&) [with Mutex = boost::mutex, boost::unique_lock<Mutex> = boost::unique_lock<boost::mutex>]’:
/usr/include/boost/thread/future.hpp:414:91:   instantiated from here
/usr/include/boost/thread/locks.hpp:269:13: error: cannot bind ‘boost::unique_lock<boost::mutex>’ lvalue to ‘boost::unique_lock<boost::mutex>&&’
/usr/include/boost/thread/locks.hpp:279:14: error:   initializing argument 1 of ‘void boost::unique_lock<Mutex>::swap(boost::unique_lock<Mutex>&&) 
[with Mutex = boost::mutex, boost::unique_lock<Mutex> = boost::unique_lock<boost::mutex>]’


это нормально ? как это испрвить ? ну т.е. юзать бустовские потоки, но при этом задействовать лямбда выражения ?... Простая замена 
boost::thread на std::thread и всех остальных элементов, не приведет к тому что придется их переделывать ?

в VS2010 поддерживаются std-шные потоки ?
PM MAIL   Вверх
cupper
Дата 21.2.2011, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



переделал везде на stl без проблем собралось. Надеюсь на vs тоже соберется.
PM MAIL   Вверх
azesmcar
Дата 21.2.2011, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(cupper @  21.2.2011,  00:15 Найти цитируемый пост)
в VS2010 поддерживаются std-шные потоки ? 

немного.

cupper
ну покажи какой нибудь минимальный код, который воспроизводит ошибку.
PM   Вверх
cupper
Дата 21.2.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



обратите внимание на ошибки и файлы указанные в описании. Единственный не из библиотечных это мой main.c на 5 строчке, где как раз написано include <boost/thread.hpp>

а то что частично, это я гдето видал тему о том что атомарные типы до сих пор не поддерживаются. А что еще ?
PM MAIL   Вверх
azesmcar
Дата 21.2.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(cupper @  21.2.2011,  09:44 Найти цитируемый пост)
обратите внимание на ошибки и файлы указанные в описании. Единственный не из библиотечных это мой main.c на 5 строчке, где как раз написано include <boost/thread.hpp>


Ну вот например
http://liveworkspace.org/code/af3478ac20ad...f61e9aed8c3d4fb
на liveworkspace.org исходники компилируются с опцией -std=c++0x
работает ведь.

Цитата(cupper @  21.2.2011,  09:44 Найти цитируемый пост)
а то что частично, это я гдето видал тему о том что атомарные типы до сих пор не поддерживаются. А что еще ? 

так подробно не помню честно говоря, проверить не могу, у меня полная поддержка стоит, так-что все работает smile

Добавлено через 3 минуты и 26 секунд
Проверил все таки. Оказывается там вообще ничего нет, thread, mutex, condition_variable ... всего этого нет.

PM   Вверх
boostcoder
Дата 21.2.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



никаких проблем с бустом при использовании -std=c++0x нет. код показывайте.
PM WWW   Вверх
cupper
Дата 22.2.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



вот код

http://forum.vingrad.ru/forum/topic-323043.html

с той лишь разницей что для многопоточонсти щас везде указано std, а не boost, ну и хедеры соотственные подключены, а аналогичные из буста закоменчены. 
На g++ v 4.5.1 это собирается, если вернуть многопоточонсть boost'a вываливаются ошибки приведенные в первом посте.

в VS2010 напротив, с boost все собирается (+заюзаны лямбда), ну а поддержки std'ных как я уже сам убедился нету.
PM MAIL   Вверх
azesmcar
Дата 22.2.2011, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



вот, пожалуйста.
http://liveworkspace.org/code/f82d6b5e3976...4fe9d2774cdb0fa

что за компилятор? mingw или линуксовский gcc? версия как я понял 4.5.1?
попробуй локализировать ошибку, собери минимальный проект, который не компилируется.
Код

#include <iostream>
#include <boost/thread.hpp>

int main()
{
   boost::thread th1([]() { std::cout << "Hello Concurrent World" << std::endl; });
   th1.join();
}

вот это у теня компилируется?

Добавлено через 3 минуты и 59 секунд
cupper

кажется вижу источник проблемы
Код

...
thread th1(send, &st, number);
thread th2(recv, &st, number);
...

здесь нет префикса boost::, у тебя стоит using namespace std;, а какой нибудь из заголовков неявно включает std::thread.
PM   Вверх
cupper
Дата 22.2.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(azesmcar @ 22.2.2011,  10:10)
кажется вижу источник проблемы
Код

...
thread th1(send, &st, number);
thread th2(recv, &st, number);
...

здесь нет префикса boost::, у тебя стоит using namespace std;, а какой нибудь из заголовков неявно включает std::thread.

его нет так как в том примере как я уже сказал юзается std. Когда использовался boost, было явно написано boost::thread. Приду домой попробую постепенно из проекта выкидывать всю многопоточность что бы ради интереса узнать гдеж была ошибка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.