![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
rp80 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
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 |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
для MinGW надо указать многопоточность: -mthreads
второй случай - так навскидку сложно сказать. покажи, что линкуешь и какие флаги компиляции ставишь. Сообщение отредактировал Iron Bug - 23.11.2011, 16:39 |
|
|
rp80 |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
для MinGW надо указать многопоточность: -mthreads второй случай - так навскидку сложно сказать. покажи, что линкуешь и какие флаги компиляции ставишь. 1.
Вот что у меня в файле .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 |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
блин, еле вспомнила!
-fexceptions вот. попробуй с этой опцией собрать. должно проканать. Не знаю где там посмотреть все опции там в настройках компилятора можно задать опцию: показывать полную строку (в окне build будет выводиться вся команда). это в Settings->Compiler and debugger. там нужно сначала выбрать сверху в списке нужный компилятор, потом перейти на закладку Other settings, настройка Compiler logging - поставить её в Full command line. Сообщение отредактировал Iron Bug - 23.11.2011, 17:55 |
|
|
rp80 |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 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 |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
вообще, это странное поведение. попробуй переименовать функцию потока: вдруг ему не нравится это имя и оно просто перекрывает какое-нибудь определение. может, у тебя просто Mingw как-то криво установлен?
я сейчас как раз для своей работы собираю кроссплатформенную сборку буста для венды под линём. когда дособерётся - проверю, что там не так с Mingw и таким простейшим файлом. |
|
|
rp80 |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
вообще, это странное поведение. попробуй переименовать функцию потока: вдруг ему не нравится это имя и оно просто перекрывает какое-нибудь определение. может, у тебя просто Mingw как-то криво установлен? я сейчас как раз для своей работы собираю кроссплатформенную сборку буста для венды под линём. когда дособерётся - проверю, что там не так с Mingw и таким простейшим файлом. Не, дело не в именах. Собственно, можно закоментить все кроме инклуда thread. И все равно то же самое. Вообще, что это за ошибка <Имя файла> required from <Строка в программе>? |
|
|
Iron Bug |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
я такой ошибки не видела, но догадываюсь, что это может быть.
в связи с принятием стандарта С++11 многие библиотеки перекочевали из буста в стандарт. в том числе shared_ptr. я подозреваю, что компилятор где-то не может понять, какой из вариантов ему использовать. берёт часть из стандартной библиотеки, а часть - из буста. и это вызывает у него несварение кода. я такое видела с одним из старых бустов и студией. у тебя буст собран тем же компилятором? может, имеет смысл собрать его той же версией и глюк исчезнет. если это действительно конфликт имён, то можно попробовать поставить после include'ов using boost::shared_ptr; возможно, тогде компилятор поймёт, что надо юзать именно этот shared_ptr. Сообщение отредактировал Iron Bug - 24.11.2011, 13:59 |
|
|
rp80 |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
я такой ошибки не видела, но догадываюсь, что это может быть. в связи с принятием стандарта С++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 как-то так, но сама программа не запускается, возможно из-за того, что не может он подгрузить либу динамически. Не знаю уж что ещё думать. Вот кстати полный билд лог. Может я что-то в нем не вижу.. 6 errors, 4 warnings |
|
|
Iron Bug |
![]()
Сообщение
#10
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
дык, это вообще не ошибки. это пояснения, откуда взялся warning, который выше, про неиспользуемую переменную.
ошибка тут только одна: он не смог найти dll. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.4.2025, 15:34 |