crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Проблемы с boost::thread
rp80
  опции профиля:
сообщение 23.11.2011, 16:13
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 10.9.2011
Пользователь №: 2860

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

void thread()
{
        std::cout<<"in thread"<<std::endl;
}

int main(int argc, char *argv[])
{
    std::cout<<"In main"<<std::endl;
    boost::thread t(thread);
    t.join();
}


1. Собираю и запускаю через qt creator. Там соответственно свой мингв. Компилится, запускается и падает на конструкторе потока.
2. Собираю и запускаю с мингв 4.7.0. Здесь не компилится. 6 ошибок вида

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\smart_ptr\detail\shared_count.hpp|95| required from 'boost::detail::shared_count::shared_count(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]'|

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\exception\detail\exception_ptr.hpp|182| required from 'void boost::unknown_exception::add_original_type(const E&) [with E = std::exception]'|

Что-то не так с исключениями что ли..

В чем тут дело? Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.11.2011, 16:39
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


для MinGW надо указать многопоточность: -mthreads

второй случай - так навскидку сложно сказать. покажи, что линкуешь и какие флаги компиляции ставишь.

Сообщение отредактировал Iron Bug - 23.11.2011, 16:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rp80
  опции профиля:
сообщение 23.11.2011, 17:20
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 10.9.2011
Пользователь №: 2860

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 23.11.2011, 17:39) *
для MinGW надо указать многопоточность: -mthreads

второй случай - так навскидку сложно сказать. покажи, что линкуешь и какие флаги компиляции ставишь.


1.
QT       += core
QT       -= gui
TARGET = mt1
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += E:\work\ides_comp\mingw\include\boost_1_47_0
LIBS += E:\work\ides_comp\mingw\include\boost_1_47_0\stage\lib\libboost_thread-mgw47-mt-1_47.dll
QMAKE_CXXFLAGS += -mthreads

Вот что у меня в файле .pro.

2.
Проект в codeblocks. Не знаю где там посмотреть все опции, но по крайней мере, стоят галочки -g -Wall -Wextra и добавил -mthreads
Линкую E:\work\ides_comp\mingw\include\boost_1_47_0\stage\lib\*.dll

С линковкой вроде нет проблем. Во всех этих ошибках так или иначе упоминаются исключения. Вот полный список.


E:\work\ides_comp\mingw\include\boost_1_47_0\boost\smart_ptr\detail\shared_count.hpp|95| required from 'boost::detail::shared_count::shared_count(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]'|

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\smart_ptr\shared_ptr.hpp|183| required from 'boost::shared_ptr<T>::shared_ptr(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>; T = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]'|

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\exception\info.hpp|171| required from 'const E& boost::exception_detail::set_info(const E&, const boost::error_info<Tag, T>&) [with E = boost::unknown_exception; Tag = boost::tag_original_exception_type; T = const std::type_info*]'|

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\exception\info.hpp|192| required from 'typename boost::enable_if<boost::exception_detail::derives_boost_exception<E>, const E&>::type boost::operator<<(const E&, const boost::error_info<Tag, T>&) [with E = boost::unknown_exception; Tag = boost::tag_original_exception_type; T = const std::type_info*; typename boost::enable_if<boost::exception_detail::derives_boost_exception<E>, const E&>::type = const boost::unknown_exception&]'|

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\exception\detail\exception_ptr.hpp|182| required from 'void boost::unknown_exception::add_original_type(const E&) [with E = std::exception]'|

E:\work\ides_comp\mingw\include\boost_1_47_0\boost\exception\detail\exception_ptr.hpp|161| required from here|




Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.11.2011, 17:54
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


блин, еле вспомнила!
-fexceptions
вот.
попробуй с этой опцией собрать. должно проканать.

Цитата(rp80 @ 23.11.2011, 20:20) *
Не знаю где там посмотреть все опции

там в настройках компилятора можно задать опцию: показывать полную строку (в окне build будет выводиться вся команда). это в Settings->Compiler and debugger. там нужно сначала выбрать сверху в списке нужный компилятор, потом перейти на закладку Other settings, настройка Compiler logging - поставить её в Full command line.

Сообщение отредактировал Iron Bug - 23.11.2011, 17:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rp80
  опции профиля:
сообщение 23.11.2011, 20:37
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 10.9.2011
Пользователь №: 2860

Спасибо сказали: 0 раз(а)




Репутация:   0  



Что-то ничего не помогает..

g++.exe -Wall -fexceptions -g -Wextra -Wall -g -fexceptions -mthreads -IC:\soft\ides_comp\mingw\include\boost_1_47_0 -c D:\work\cpp_cb\mt1\main.cpp -o obj\Debug\main.o

вот строка компилятора

Добавление\удаление -fexceptions -mthreads по отдельности или вместе на ошибки никак не влияет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.11.2011, 21:37
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


вообще, это странное поведение. попробуй переименовать функцию потока: вдруг ему не нравится это имя и оно просто перекрывает какое-нибудь определение. может, у тебя просто Mingw как-то криво установлен?

я сейчас как раз для своей работы собираю кроссплатформенную сборку буста для венды под линём. когда дособерётся - проверю, что там не так с Mingw и таким простейшим файлом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rp80
  опции профиля:
сообщение 23.11.2011, 21:51
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 10.9.2011
Пользователь №: 2860

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 23.11.2011, 22:37) *
вообще, это странное поведение. попробуй переименовать функцию потока: вдруг ему не нравится это имя и оно просто перекрывает какое-нибудь определение. может, у тебя просто Mingw как-то криво установлен?

я сейчас как раз для своей работы собираю кроссплатформенную сборку буста для венды под линём. когда дособерётся - проверю, что там не так с Mingw и таким простейшим файлом.


Не, дело не в именах. Собственно, можно закоментить все кроме инклуда thread. И все равно то же самое.

Вообще, что это за ошибка <Имя файла> required from <Строка в программе>?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 24.11.2011, 12:41
Сообщение #8


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


я такой ошибки не видела, но догадываюсь, что это может быть.
в связи с принятием стандарта С++11 многие библиотеки перекочевали из буста в стандарт. в том числе shared_ptr. я подозреваю, что компилятор где-то не может понять, какой из вариантов ему использовать. берёт часть из стандартной библиотеки, а часть - из буста. и это вызывает у него несварение кода. я такое видела с одним из старых бустов и студией.
у тебя буст собран тем же компилятором? может, имеет смысл собрать его той же версией и глюк исчезнет.

если это действительно конфликт имён, то можно попробовать поставить после include'ов
using boost::shared_ptr;
возможно, тогде компилятор поймёт, что надо юзать именно этот shared_ptr.

Сообщение отредактировал Iron Bug - 24.11.2011, 13:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rp80
  опции профиля:
сообщение 24.11.2011, 18:13
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 36
Регистрация: 10.9.2011
Пользователь №: 2860

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 24.11.2011, 13:41) *
я такой ошибки не видела, но догадываюсь, что это может быть.
в связи с принятием стандарта С++11 многие библиотеки перекочевали из буста в стандарт. в том числе shared_ptr. я подозреваю, что компилятор где-то не может понять, какой из вариантов ему использовать. берёт часть из стандартной библиотеки, а часть - из буста. и это вызывает у него несварение кода. я такое видела с одним из старых бустов и студией.
у тебя буст собран тем же компилятором? может, имеет смысл собрать его той же версией и глюк исчезнет.

если это действительно конфликт имён, то можно попробовать поставить после include'ов
using boost::shared_ptr;
возможно, тогде компилятор поймёт, что надо юзать именно этот shared_ptr.


Вообще очень похоже что что-то с самим мингв, 4.7.0 с частичной поддержкой нового стандарта. В опциях компилятора есть Have g++ follow 1998 ISO C++ и Have g++ follow 1998 ISO C++0x. Когда включаешь их по одному ошибок только прибавляется.

Перекомпилил уже буст с измененным thread/detail/config.hpp. Вроде такие ошибки могут быть если буст не определяет версию мингв.. Но тоже безрезультатно

Но мне в общем не обязательно именно этот компилятор использовать. Нужно перенести с линукса большой проект на бусте, главное чтобы работало.

Компилятор, прилагающийся к qt creatorу, таких ошибок не выдает, но тоже не работает как надо. Запускается оболочка в которой он запускает программы process_stub.exe как-то так, но сама программа не запускается, возможно из-за того, что не может он подгрузить либу динамически. Не знаю уж что ещё думать.

Вот кстати полный билд лог. Может я что-то в нем не вижу..


-------------- Build: Debug in mt1 ---------------

g++.exe -Wall -fexceptions  -g  -lboost_system-mt -DBOOST_USE_WINDOWS_H   -IC:\soft\ides_comp\mingw\include\boost_1_47_0  -c D:\work\cpp_cb\mt1\main.cpp -o obj\Debug\main.o
In file included from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_data.hpp:12:0,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread.hpp:15,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread.hpp:13,
                 from D:\work\cpp_cb\mt1\main.cpp:2:
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_heap_alloc.hpp:59:40: warning: inline function 'void* boost::detail::allocate_raw_heap_memory(unsigned int)' declared as  dllimport: attribute ignored [-Wattributes]
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_heap_alloc.hpp:69:39: warning: inline function 'void boost::detail::free_raw_heap_memory(void*)' declared as  dllimport: attribute ignored [-Wattributes]
In file included from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/basic_timed_mutex.hpp:14:0,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/mutex.hpp:8,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/mutex.hpp:14,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/detail/thread.hpp:13,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread.hpp:22,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread.hpp:13,
                 from D:\work\cpp_cb\mt1\main.cpp:2:
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/interlocked_read.hpp: In function 'void boost::detail::interlocked_write_release(void* volatile*, void*)':
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/interlocked_read.hpp:71:56: warning: value computed is not used [-Wunused-value]
In file included from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/smart_ptr/shared_ptr.hpp:30:0,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/shared_ptr.hpp:17,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/date_time/time_clock.hpp:17,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread_time.hpp:9,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/win32/thread_data.hpp:10,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread/thread.hpp:15,
                 from C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/thread.hpp:13,
                 from D:\work\cpp_cb\mt1\main.cpp:2:
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/checked_delete.hpp: In instantiation of 'void boost::checked_delete(T*) [with T = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]':
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/smart_ptr/detail/shared_count.hpp:95:13:   required from 'boost::detail::shared_count::shared_count(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]'
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/smart_ptr/shared_ptr.hpp:183:50:   required from 'boost::shared_ptr<T>::shared_ptr(Y*) [with Y = boost::error_info<boost::tag_original_exception_type, const std::type_info*>; T = boost::error_info<boost::tag_original_exception_type, const std::type_info*>]'
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/info.hpp:171:69:   required from 'const E& boost::exception_detail::set_info(const E&, const boost::error_info<Tag, T>&) [with E = boost::unknown_exception; Tag = boost::tag_original_exception_type; T = const std::type_info*]'
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/info.hpp:192:46:   required from 'typename boost::enable_if<boost::exception_detail::derives_boost_exception<E>, const E&>::type boost::operator<<(const E&, const boost::error_info<Tag, T>&) [with E = boost::unknown_exception; Tag = boost::tag_original_exception_type; T = const std::type_info*; typename boost::enable_if<boost::exception_detail::derives_boost_exception<E>, const E&>::type = const boost::unknown_exception&]'
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/detail/exception_ptr.hpp:182:13:   required from 'void boost::unknown_exception::add_original_type(const E&) [with E = std::exception]'
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/exception/detail/exception_ptr.hpp:161:32:   required from here
C:\soft\ides_comp\mingw\include\boost_1_47_0/boost/checked_delete.hpp:34:5: warning: deleting object of polymorphic class type 'boost::error_info<boost::tag_original_exception_type, const std::type_info*>' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
g++.exe -LC:\soft\ides_comp\mingw\include  -o bin\Debug\mt1.exe obj\Debug\main.o    D:\work\boost_1_47_0\stage\lib\libboost_thread-mgw47-mt-1_47.dll
g++.exe: error: D:\work\boost_1_47_0\stage\lib\libboost_thread-mgw47-mt-1_47.dll: No such file or directory
Process terminated with status 1 (0 minutes, 2 seconds)
6 errors, 4 warnings
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 24.11.2011, 18:38
Сообщение #10


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


дык, это вообще не ошибки. это пояснения, откуда взялся warning, который выше, про неиспользуемую переменную.
ошибка тут только одна: он не смог найти dll.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 15:33