Boost::Process 链接器错误与 boost::process::posix::use_vfork 相结合
Boost::Process linker error in combination with boost::process::posix::use_vfork
我正在玩弄 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
产生的链接器错误如下
In function '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 本身只是 header,那么为什么它会抱怨 boost::process<...>::invoke()
的未定义引用?
我尝试添加 -lboost_system
和 -lboost_iostreams
,但这并没有解决链接器错误。
它可能是一个文档bug/omission: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;
}
我正在玩弄 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
产生的链接器错误如下
In function '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 本身只是 header,那么为什么它会抱怨 boost::process<...>::invoke()
的未定义引用?
我尝试添加 -lboost_system
和 -lboost_iostreams
,但这并没有解决链接器错误。
它可能是一个文档bug/omission: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;
}