1

我正在Boost::Process玩弄(1.64.0),使用 GCC 7.1.1,试图vfork()在分叉进程时强制使用。我收到以下程序的链接器错误:

#include <boost/process.hpp>

namespace bp = ::boost::process;

int main(void)
{
  bp::child c("ls", bp::posix::use_vfork);
  c.wait();
  return 0;
}

使用:

g++ use_vfork.cpp

生成的链接器错误如下

在函数'boost::process::detail::posix::executor>, boost::fusion::filter_view&, boost::process::detail::posix::use_vfork_ const&> const, boost::process::detail ::is_initializer > > > >::operator()()': spawn_simple.cpp:(.text._ZN5boost7process6detail5posix8executorINS_6fusion10joint_viewINS4_5tupleIJNS2_12exe_cmd_initIcEEEEENS4_11filter_viewIKNS6_IJRA6_KcRNS2_8null_outILi1ELin1EEERKNS2_10use_vfork_EEEENS1_14is_initializerIN4mpl_3argILin1EEEEEEEEEEclEv[_ZN5boost7process6detail5posix8executorINS_6fusion10joint_viewINS4_5tupleIJNS2_12exe_cmd_initIcEEEEENS4_11filter_viewIKNS6_IJRA6_KcRNS2_8null_outILi1ELin1EEERKNS2_10use_vfork_EEEENS1_14is_initializerIN4mpl_3argILin1EEEEEEEEEEclEv]+0x31): undefined reference to `boost::process::detail::posix::executor > , boost::fusion::filter_view&, boost::process::detail::posix::use_vfork_ const&> const, boost::process::detail::is_initializer > > > >::invoke(mpl_::bool_, mpl_::bool_)'

据我所知,Boost Process 本身只是标题,那么为什么它抱怨未定义的引用boost::process<...>::invoke()

我尝试添加-lboost_systemand -lboost_iostreams,但这并不能解决链接器错误。

4

1 回答 1

2

它可能是文档错误/遗漏:vfork有条件地编译支持:

#define BOOST_POSIX_HAS_VFORK 1

所以这有效:

#include <boost/process.hpp>

namespace bp = ::boost::process;

int main(void)
{
    bp::child c("ls", bp::posix::use_vfork);
    c.wait();
    return 0;
}
于 2017-08-22T09:03:44.597 回答