编译简单的 Boost Process 代码失败

问题描述

我正在尝试实现一个独立于平台的函数(在 Windows/Linux/Mac OS X 上工作),用于使用 boost/process.hpp 调用外部进程,如下所示:

#include <sstream>
#include <boost/process.hpp>

std::string execute_external_process(const std::string &command,const std::vector<std::string> &arguments) {
    boost::process::ipstream out;
    boost::process::child child(boost::process::search_path(command),arguments,boost::process::std_out > out,boost::process::std_err > out);
    std::stringstream process_output_builder;
    std::string line;
    while (child.running() && std::getline(out,line) && !line.empty()) {
        process_output_builder << line;
        process_output_builder << "\n";
    }

    child.wait();

    return process_output_builder.str();
}

但是,我收到以下 Boost 编译错误

In file included from /usr/include/boost/process/async.hpp:35,from /usr/include/boost/process.hpp:23,from ../src/ExternalProcessUtils.cpp:4:
/bin/vcpkg/installed/x64-linux/include/boost/asio/io_service.hpp:27:20: error: conflicting declaration ‘typedef class boost::asio::io_context boost::asio::io_service’
   27 | typedef io_context io_service;
      |                    ^~~~~~~~~~
In file included from /usr/include/boost/process/detail/traits.hpp:11,from /usr/include/boost/process/async.hpp:32,from ../src/ExternalProcessUtils.cpp:4:
/usr/include/boost/process/detail/traits/async.hpp:15:7: note: prevIoUs declaration as ‘class boost::asio::io_service’
   15 | class io_service;
      |       ^~~~~~~~~~
In file included from /usr/include/c++/10/bits/move.h:57,from /usr/include/c++/10/bits/stl_pair.h:59,from /usr/include/c++/10/bits/stl_algobase.h:64,from /usr/include/c++/10/vector:60,from ../src/ExternalProcessUtils.hpp:3,from ../src/ExternalProcessUtils.cpp:1:
/usr/include/c++/10/type_traits: In instantiation of ‘struct std::is_base_of<boost::asio::execution::detail::any_executor_base,boost::asio::io_service>’:
/bin/vcpkg/installed/x64-linux/include/boost/asio/execution/any_executor.hpp:1400:66:   required by substitution of ‘template<class Executor> boost::asio::execution::any_executor<boost::asio::execution::context_as_t<boost::asio::execution_context&>,boost::asio::execution::detail::blocking::never_t<0>,boost::asio::execution::prefer_only<boost::asio::execution::detail::blocking::possibly_t<0> >,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::tracked_t<0> >,boost::asio::execution::prefer_only<boost::asio::execution::detail::outstanding_work::untracked_t<0> >,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::fork_t<0> >,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0> > >::any_executor(Executor,typename std::enable_if<typename std::conditional<((! std::is_same<Executor,boost::asio::execution::any_executor<boost::asio::execution::context_as_t<boost::asio::execution_context&>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0> > > >::value) && (! std::is_base_of<boost::asio::execution::detail::any_executor_base,Executor>::value)),boost::asio::execution::detail::is_valid_target_executor<Executor,void(boost::asio::execution::context_as_t<boost::asio::execution_context&>,boost::asio::execution::prefer_only<boost::asio::execution::detail::relationship::continuation_t<0> >)>,std::integral_constant<bool,false> >::type::value,void>::type*) [with Executor = boost::asio::io_service]’
/usr/include/boost/process/detail/posix/io_service_ref.hpp:125:63:   required from here
/usr/include/c++/10/type_traits:1412:38: error: invalid use of incomplete type ‘class boost::asio::io_service’
 1412 |     : public integral_constant<bool,__is_base_of(_Base,_Derived)>
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/traits.hpp:11,from ../src/ExternalProcessUtils.cpp:4:
/usr/include/boost/process/detail/traits/async.hpp:15:7: note: forward declaration of ‘class boost::asio::io_service’
   15 | class io_service;
      |       ^~~~~~~~~~
...

删除了剩余的错误消息,因为它很长。由于我的代码看起来不错,我想知道这是否是 Boost 中的错误。我使用的是最新版本 1.75.0,但此问题也在版本 1.74.0 中出现(这就是我更新的原因)。

关于如何解决这个问题的任何想法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)