gpt4 book ai didi

c++ - OS X clang C++11 和 libstdc++ boost 编译问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:53 24 4
gpt4 key购买 nike

我编译了两个 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 库有什么建议吗?

最佳答案

尝试使用 -DBOOST_NO_CXX11_ADDRESSOF 进行编译。

也许您也可以使用 -stdlib=libc++ -lstdc++ 标志编译您的代码(不是 boost)(允许 OS X 上的程序同时使用两者)。

关于c++ - OS X clang C++11 和 libstdc++ boost 编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com