由于c++11
库,我在尝试使用boost
标准编译项目时遇到问题。
当我使用c++98
标准编译它时没有问题,我不明白为什么。
我使用next命令编译(c ++ 11):
g++ -c -pipe -O2 -fPIC -std=gnu++11 -Wall -W -D_REENTRANT -DENABLE_IPV6 -DTIXML_USE_STL -DBOOST_FILESYSTEM_DEPRECATED -I. -I/usr/include -o obj/test.o ../src/net/common/test.cpp
要使用c++98
标准进行编译,我使用相同的命令,除了我删除-std
标志。我使用g++ 5.4.0
。因此,它默认使用c++98
标准
其输出(c++11
):
In file included from /usr/include/boost/asio/detail/throw_error.hpp:19:0,
from /usr/include/boost/asio/detail/impl/posix_tss_ptr.ipp:23,
from /usr/include/boost/asio/detail/posix_tss_ptr.hpp:76,
from /usr/include/boost/asio/detail/tss_ptr.hpp:27,
from /usr/include/boost/asio/detail/call_stack.hpp:20,
from /usr/include/boost/asio/impl/handler_alloc_hook.ipp:19,
from /usr/include/boost/asio/handler_alloc_hook.hpp:80,
from /usr/include/boost/asio/detail/handler_alloc_helpers.hpp:21,
from /usr/include/boost/asio/detail/bind_handler.hpp:19,
from /usr/include/boost/asio/detail/wrapped_handler.hpp:18,
from /usr/include/boost/asio/io_service.hpp:24,
from /usr/include/boost/asio/basic_io_object.hpp:19,
from /usr/include/boost/asio/basic_socket.hpp:20,
from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
from /usr/include/boost/asio.hpp:21,
from ../src/net/test.h:36,
from ../src/net/common/test.cpp:32:
/usr/include/boost/system/error_code.hpp:190:32: error: overriding ‘virtual const char* boost::system::error_category::name() const noexcept’
virtual const char * name() const BOOST_SYSTEM_NOEXCEPT = 0;
^
我可能错了,但看起来boost
无法检测到我为c++11
设置了标志
这就是我尝试使用
g++ -E -dM -pipe -O2 -fPIC -std=gnu++11 -Wall -W -D_REENTRANT -DENABLE_IPV6 -DTIXML_USE_STL -DBOOST_FILESYSTEM_DEPRECATED -I. -I/usr/include ../src/net/common/test.cpp > obj/test_11.txt
我为c++98
做了同样的事情。它的输出:
c++98
:
// it does not set __GXX_EXPERIMENTAL_CXX0X__
#define BOOST_NOEXCEPT
#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT
c++11
:
#define __GXX_EXPERIMENTAL_CXX0X__ 1 //It sets c++11 macro
#define BOOST_NOEXCEPT noexcept
#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT
好像不行,不是吗?它在BOOST_NOEXCEPT
中将noexcept
定义为c++11
,在c++98
我不是c++
的专家(c++11
也不是c++98
),所以我在这里迷失了方向。任何的想法?
备注
Boost Libraries版本(/usr/include/boost/version.hpp
):#define BOOST_VERSION 106000
答案 0 :(得分:0)
根据您的日志文件,尚未设置宏BOOST_SYSTEM_NOEXCEPT
。因为您还没有提供完整的源代码,所以我只能假设包含升压头的顺序是错误的。如果订单是正确的,宏BOOST_SYSTEM_NOEXCEPT
将被定义正确(查看一些涉及的增强源文件)。
但是,如果我们仅使用#include < asio.hpp>
,则需要有关源代码等的更多信息。
无论这些内容如何,我都建议您更新到最新版本的boost。