Как подавить предупреждения boost :: thread с помощью gcc? - PullRequest
3 голосов
/ 20 сентября 2010

В моем проекте я недавно решил использовать boost :: thread.Мой код прекрасно компилируется под Linux, но под Windows (x86 или x64) я получаю следующие предупреждения с gcc 4.5:

In file included from C:\Boost\include\boost-1_44/boost/thread/shared_mutex.hpp:14:0,
                 from C:\Boost\include\boost-1_44/boost/thread/detail/thread_group.hpp:9,
                 from C:\Boost\include\boost-1_44/boost/thread/thread.hpp:24,
                 from C:\Boost\include\boost-1_44/boost/thread.hpp:13,
                 from include\systools/upnp_control_point.hpp:50,
                 from src\upnp_control_point.cpp:45:
C:\Boost\include\boost-1_44/boost/thread/win32/shared_mutex.hpp: In member function 'T boost::shared_mutex::interlocked_
compare_exchange(T*, T, T) [with T = boost::shared_mutex::state_data]':
C:\Boost\include\boost-1_44/boost/thread/win32/shared_mutex.hpp:110:103:   instantiated from here
C:\Boost\include\boost-1_44/boost/thread/win32/shared_mutex.hpp:50:99: error: dereferencing type-punned pointer will bre
ak strict-aliasing rules
C:\Boost\include\boost-1_44/boost/thread/win32/shared_mutex.hpp:50:99: error: dereferencing type-punned pointer will bre
ak strict-aliasing rules
C:\Boost\include\boost-1_44/boost/thread/win32/shared_mutex.hpp:51:52: error: dereferencing type-punned pointer will bre
ak strict-aliasing rules
C:\Boost\include\boost-1_44/boost/thread/win32/shared_mutex.hpp:51:52: error: dereferencing type-punned pointer will bre
ak strict-aliasing rules
In file included from C:\Boost\include\boost-1_44/boost/algorithm/string/detail/find_format.hpp:18:0,
                 from C:\Boost\include\boost-1_44/boost/algorithm/string/find_format.hpp:23,
                 from C:\Boost\include\boost-1_44/boost/algorithm/string/replace.hpp:22,
                 from C:\Boost\include\boost-1_44/boost/date_time/date_facet.hpp:17,
                 from C:\Boost\include\boost-1_44/boost/date_time/gregorian/gregorian_io.hpp:16,
                 from C:\Boost\include\boost-1_44/boost/date_time/gregorian/gregorian.hpp:31,
                 from C:\Boost\include\boost-1_44/boost/date_time/posix_time/time_formatters.hpp:12,
                 from C:\Boost\include\boost-1_44/boost/date_time/posix_time/posix_time.hpp:24,
                 from include\systools/upnp_device.hpp:51,
                 from include\systools/upnp_control_point.hpp:48,
                 from src\upnp_control_point.cpp:45:
C:\Boost\include\boost-1_44/boost/algorithm/string/detail/find_format_store.hpp: At global scope:
C:\Boost\include\boost-1_44/boost/algorithm/string/detail/find_format_store.hpp: In instantiation of 'bool boost::algori
thm::detail::check_find_result(InputT&, FindResultT&) [with InputT = std::basic_string<char>, FindResultT = boost::itera
tor_range<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >]':
C:\Boost\include\boost-1_44/boost/algorithm/string/detail/find_format_all.hpp:259:17:   instantiated from 'void boost::a
lgorithm::detail::find_format_all_impl(InputT&, FinderT, FormatterT, FindResultT) [with InputT = std::basic_string<char>
, FinderT = boost::algorithm::detail::first_finderF<const char*, boost::algorithm::is_equal>, FormatterT = boost::algori
thm::detail::const_formatF<boost::iterator_range<const char*> >, FindResultT = boost::iterator_range<__gnu_cxx::__normal
_iterator<char*, std::basic_string<char> > >]'
C:\Boost\include\boost-1_44/boost/algorithm/string/find_format.hpp:268:13:   instantiated from 'void boost::algorithm::f
ind_format_all(SequenceT&, FinderT, FormatterT) [with SequenceT = std::basic_string<char>, FinderT = boost::algorithm::d
etail::first_finderF<const char*, boost::algorithm::is_equal>, FormatterT = boost::algorithm::detail::const_formatF<boos
t::iterator_range<const char*> >]'
C:\Boost\include\boost-1_44/boost/algorithm/string/replace.hpp:654:13:   instantiated from 'void boost::algorithm::repla
ce_all(SequenceT&, const Range1T&, const Range2T&) [with SequenceT = std::basic_string<char>, Range1T = char [15], Range
2T = char [1]]'
C:\Boost\include\boost-1_44/boost/units/detail/utility.hpp:50:51:   instantiated from here
C:\Boost\include\boost-1_44/boost/algorithm/string/detail/find_format_store.hpp:74:18: error: unused parameter 'Input'
scons: *** [src\upnp_control_point.o] Error 1
scons: building terminated because of errors.

Я просто включил <boost/thread.hpp> в свой собственный файл .cpp, ничегоspecial.

Поскольку я не могу контролировать код boost, есть ли способ временно отключить эти предупреждения?Что-то вроде:

#super_killing_macro_that_disable_some_warnings
#include <boost/thread.hpp>
#its_all_good_know_i_want_my_warnings_back

Что я могу сделать?

Ответы [ 3 ]

6 голосов
/ 20 сентября 2010

Я только что обнаружил опцию -isystem, которая позволяет включать каталог в качестве системного каталога. Из файлов в этих каталогах не выдается никаких предупреждений, поэтому это кажется идеальным для моей задачи.

Кроме того, это имеет изящный побочный эффект, заставляющий SCons игнорировать эти каталоги также в дереве зависимостей. Поскольку я не ожидаю, что эти библиотеки будут часто меняться, это нормально.

1 голос
/ 19 января 2011

У меня почти такие же предупреждения на Windows XP SP3 с MinGW, установленным из mingw-get-inst-20101030 с GCC 4.5.0 и встроенным бустом 1.45.0, как указано здесь

http://fw -geekycoder.blogspot.com / 2010/12 / building-boost-using-mingw.html

Я использую флаг компилятора BOOST_THREAD_USE_LIB и флаг компоновщика -lboost_thread-mgw45-mt-1_45.В конце этого поста я получаю только четыре предупреждения:

C: \ workspace \ boost_1_45_0 / boost / thread / win32 / shared_mutex.hpp: 113: 103: создается здесь C: \workspace \ boost_1_45_0 / boost / thread / win32 / shared_mutex.hpp: 53: 99: предупреждение: разыменование указателя типа-наказание нарушит правила строгого наложения имен C: \ workspace \ boost_1_45_0 / boost / thread / win32 / shared_mutex.hpp: 53:99: предупреждение: разыменование указателя типа наказанного нарушит правила строгого алиасинга C: \ workspace \ boost_1_45_0 / boost / thread / win32 / shared_mutex.hpp: 54: 52: предупреждение: разыменование указателя наказанного типа нарушит правила строгого алиасинга C: \ workspace \ boost_1_45_0 / boost / thread / win32 / shared_mutex.hpp: 54: 52: предупреждение: разыменование указателя типа-перфоратора нарушит правила строгого наложения имен

Я не смог получить полученный кодпока не произойдет сбой, так что я не знаю, важны ли эти предупреждения (проверяя, изменяет ли многопоточность мои числовые результаты).

1 голос
/ 20 сентября 2010

вам может повезти с диагностической прагмой: http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

...