我已经编译了两个Boost库版本 - 同样是1.54和1.58:
$ mkdir build && ./bootstrap --prefix=$(pwd)/build
$ ./b2 cxxflags="-stdlib=libstdc++" linkflags="-stdlib=libstdc++" && ./b2 install
现在,我正在尝试编译这个小应用程序:
#include <boost/asio.hpp>
#include <boost/asio/steady_timer.hpp>
boost::asio::io_service io_service_;
boost::asio::steady_timer timer_(io_service_);
int
main ()
{
return 0;
}
像这样:
$ g ++ -c -std = gnu ++ 11 -stdlib = libstdc ++ -I main.cpp
它为Boost 1.54.0完美编译并为Boost 1.58.0提供错误(超过20个):
boost_1_58_0/build/include/boost/asio/detail/addressof.hpp:31:12: error: no member named 'addressof' in namespace 'std'
using std::addressof;
boost_1_58_0/build/include/boost/asio/detail/handler_alloc_helpers.hpp:37:56: error: no member named 'addressof' in namespace 'boost::asio::detail'
return asio_handler_allocate(s, boost::asio::detail::addressof(h));
~~~~~~~~~~~~~~~~~~~~~^
boost_1_58_0/build/include/boost/asio/detail/handler_alloc_helpers.hpp:48:54: error: no member named 'addressof' in namespace 'boost::asio::detail'
asio_handler_deallocate(p, s, boost::asio::detail::addressof(h));
...
我想,这是OS X特定的,并且与我传递的-std
和-stdlib
标志有关,因为如果我同时提供其中一个而不是两个,则编译。我已经阅读了很多关于libc++
和libstdc++
的内容,但我需要这些标志作为我的真实代码(人们可能已经猜到这只是一个演示代码)需要这些标志才能被编译,例如我必须使用libstdc ++而不是libc ++,我需要C ++ 11。
有没有关于如何在不放弃这些编译器标志的情况下使用最新的boost库的建议?
答案 0 :(得分:0)
尝试使用-DBOOST_NO_CXX11_ADDRESSOF
进行编译。
也许你可以使用-stdlib=libc++ -lstdc++
标志编译代码(而不是boost)(OS X上的程序可以同时使用)。