2

我遇到了一个与 Boost 相关的看似难以理解的编译错误,我已将其简化为包含单个 boost 头文件。在编译(在 Mac OS X 10.6.8 上使用 GCC 4.2)一个只包含以下内容的空文件时:

#include "boost/date_time/posix_time/posix_time.hpp"

...产生这些错误:

 In file included from ../../../Boost Libraries/Boost_1_55_0/boost/type_traits/has_left_shift.hpp:43,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/lexical_cast.hpp:165,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/string_parse_tree.hpp:13,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/period_parser.hpp:14,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/date_facet.hpp:23,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/gregorian/gregorian_io.hpp:16,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/gregorian/gregorian.hpp:31,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/time_formatters.hpp:12,
                 from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/posix_time.hpp:24,
                 from /Users/homedir/dev/TheProject/Mac/Xcode/../Source/feature/test.cpp:12:
../../../Boost Libraries/Boost_1_55_0/boost/type_traits/detail/has_binary_operator.hpp:155: error: expected unqualified-id before 'do'
In file included from ../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/posix_time.hpp:34,
                 from /Users/homedir/dev/TheProject/Mac/Xcode/../Source/feature/test.cpp:12:
../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/time_parsers.hpp:40: error: expected `}' at end of input
../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/time_parsers.hpp:40: error: expected unqualified-id at end of input
../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/time_parsers.hpp:40: error: expected `}' at end of input
../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/time_parsers.hpp:40: error: expected `}' at end of input
../../../Boost Libraries/Boost_1_55_0/boost/date_time/posix_time/time_parsers.hpp:40: error: expected `}' at end of input

这些 Boost 库被用作“仅标题”——未构建。

有什么线索吗?

4

1 回答 1

1

问题出在文件中<AssertMacros.h>,该文件以某种方式被包含在内。

check它定义了一个名为(和另一个名为)的宏,它与“boost/type_traits/detail/has_binary_operator.hpp”中require命名的函数冲突。check

您可以定义__ASSERTMACROS__以防止这种情况发生。

FWIW,在 Mac OS X 10.7 及更高版本中,Apple 将这些宏重命名为__checketc,以防止此问题。

于 2014-01-20T00:56:46.923 回答