Я скомпилировал две версии библиотеки 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 и выдает ошибки (более 20) для Boost 1.58.0:
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.
Есть ли какие-либо предложения о том, как использовать последние библиотеки повышения, не отказываясь от этих флагов компилятора?