3

在我的项目中,我最近决定使用 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文件中,没什么特别的。

由于我无法控制 boost 的代码,有没有办法暂时抑制这些警告?就像是:

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

我能做些什么 ?

4

3 回答 3

6

我刚刚发现了-isystem允许将目录包含为系统目录的选项。这些目录中的文件不会发出任何警告,因此它似乎非常适合我的任务。

SCons此外,这具有在依赖树中忽略这些目录的简洁副作用。由于我不希望这些库经常更改,这很好。

于 2010-09-20T07:45:55.517 回答
1

您可能对诊断编译指示有一些运气:http: //gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

于 2010-09-20T07:21:32.143 回答
1

我在 Windows XP SP3 上遇到了几乎相同的警告,MinGW 从 mingw-get-inst-20101030 安装,GCC 4.5.0 和 boost 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:警告:取消引用类型双关指针将打破严格的别名规则

我还不能让生成的代码不崩溃,所以我不知道这些警告是否重要(通过检查线程是否改变了我的数值结果)。

于 2011-01-19T17:35:06.147 回答