使用 Boost.Python 修复未解析的外部符号

Fixing unresolved external symbols using Boost.Python

本文关键字:外部 符号 Boost Python 使用      更新时间:2023-10-16

我正在尝试构建一个库并收到几个"未解决的外部符号"错误。我正在尝试修复其中一个错误,这应该让我知道如何继续。该错误是:未解析的外部符号是处理器功能存在。根据我的理解,由于这不是我尝试构建的代码的一部分,因此必须存在于"lib"文件中。据此,lib 文件应该是 kernel32.lib。现在在"Windows Kits"下有几个kernel32.lib文件。我想在Visual Studio Developer Command提示符下编译时应该默认包含它,因为它应该是环境的一部分。我仍然在库的 JamFile 中的 #requirements 下添加了路径"C:\Program\ Files\ (x86)\Windows\ Kits\8.1\Lib\winv6.3\um\x64">我还在其中添加了">C:\Program\ Files\ (x86)\Windows\ Kits\8.1\Include\um"。但是错误没有变化。如何确定需要包含哪个文件?

注意:这个问题与如何解决未解决的外部符号错误不同,我已经完成了该问题的答案,现在我正在尝试将其应用于此特定错误。

编辑:我正在尝试构建依赖于Boost.Python的libtorrent库。我在 Boost 的根目录中使用 --with-python=C:\Python27 构建了 Boost.Python。在此之后,我将BOOST_ROOT添加到环境变量中,并将其添加到路径中。之后,我正在尝试使用 libtorrent python 绑定bjam variant=release memory-model=64完整的错误日志在这里。

编辑 2:跟进对此问题的评论,我已将所需的库添加到 JamFile,错误数量已从 187 个减少到 11 个。其余错误是:

create_torrent.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class boost::python::api::object const & __cdecl boost::python::objects::identity_function(void)" (__imp_?identity_function@objects@python@boost@@YAAEBVobject@api@23@XZ) referenced in function "class boost::python::api::object __cdecl boost::python::objects::detail::demand_iterator_class<struct `anonymous namespace'::FileIter,struct boost::python::return_value_policy<struct boost::python::return_by_value,struct boost::python::default_call_policies> >(char const *,struct `anonymous namespace'::FileIter *,struct boost::python::return_value_policy<struct boost::python::return_by_value,struct boost::python::default_call_policies> const &)" (??$demand_iterator_class@UFileIter@?A0x1efcf82b@@U?$return_value_policy@Ureturn_by_value@python@boost@@Udefault_call_policies@23@@python@boost@@@detail@objects@python@boost@@YA?AVobject@api@23@PEBDPEAUFileIter@?A0x1efcf82b@@AEBU?$return_value_policy@Ureturn_by_value@python@boost@@Udefault_call_policies@23@@23@@Z)
torrent_info.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) class boost::python::api::object const & __cdecl boost::python::objects::identity_function(void)" (__imp_?identity_function@objects@python@boost@@YAAEBVobject@api@23@XZ)
create_torrent.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl boost::python::objects::stop_iteration_error(void)" (__imp_?stop_iteration_error@objects@python@boost@@YAXXZ) referenced in function "struct _object * __cdecl boost::python::detail::invoke<struct boost::python::to_python_value<struct libtorrent::file_entry const &>,struct boost::python::objects::iterator_range<struct boost::python::return_value_policy<struct boost::python::return_by_value,struct boost::python::default_call_policies>,struct `anonymous namespace'::FileIter>::next,struct boost::python::arg_from_python<struct boost::python::objects::iterator_range<struct boost::python::return_value_policy<struct boost::python::return_by_value,struct boost::python::default_call_policies>,struct `anonymous namespace'::FileIter> &> >(struct boost::python::detail::invoke_tag_<0,0>,struct boost::python::to_python_value<struct libtorrent::file_entry const &> const &,struct boost::python::objects::iterator_range<struct boost::python::return_value_policy<struct boost::python::return_by_value,struct boost::python::default_call_policies>,struct `anonymous namespace'::FileIter>::next &,struct boost::python::arg_from_python<struct boost::python::objects::iterator_range<struct boost::python::return_value_policy<struct boost::python::return_by_value,struct boost::python::default_call_policies>,struct `anonymous namespace'::FileIter> &> &)" (??$invoke@U?$to_python_value@AEBUfile_entry@libtorrent@@@python@boost@@Unext@?$iterator_range@U?$return_value_policy@Ureturn_by_value@python@boost@@Udefault_call_policies@23@@python@boost@@UFileIter@?A0x1efcf82b@@@objects@23@U?$arg_from_python@AEAU?$iterator_range@U?$return_value_policy@Ureturn_by_value@python@boost@@Udefault_call_policies@23@@python@boost@@UFileIter@?A0x1efcf82b@@@objects@python@boost@@@23@@detail@python@boost@@YAPEAU_object@@U?$invoke_tag_@$0A@$0A@@012@AEBU?$to_python_value@AEBUfile_entry@libtorrent@@@12@AEAUnext@?$iterator_range@U?$return_value_policy@Ureturn_by_value@python@boost@@Udefault_call_policies@23@@python@boost@@UFileIter@?A0x1efcf82b@@@objects@12@AEAU?$arg_from_python@AEAU?$iterator_range@U?$return_value_policy@Ureturn_by_value@python@boost@@Udefault_call_policies@23@@python@boost@@UFileIter@?A0x1efcf82b@@@objects@python@boost@@@12@@Z)
torrent_info.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl boost::python::objects::stop_iteration_error(void)" (__imp_?stop_iteration_error@objects@python@boost@@YAXXZ)
session.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::stl_input_iterator_impl(void)" (__imp_??0stl_input_iterator_impl@objects@python@boost@@QEAA@XZ) referenced in function "public: __cdecl boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??0?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@QEAA@XZ)
torrent_handle.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::stl_input_iterator_impl(void)" (__imp_??0stl_input_iterator_impl@objects@python@boost@@QEAA@XZ)
session.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::stl_input_iterator_impl(class boost::python::api::object const &)" (__imp_??0stl_input_iterator_impl@objects@python@boost@@QEAA@AEBVobject@api@23@@Z) referenced in function "public: __cdecl boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class boost::python::api::object const &)" (??0?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@QEAA@AEBVobject@api@12@@Z)
torrent_handle.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::stl_input_iterator_impl(class boost::python::api::object const &)" (__imp_??0stl_input_iterator_impl@objects@python@boost@@QEAA@AEBVobject@api@23@@Z)
session.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl boost::python::objects::stl_input_iterator_impl::increment(void)" (__imp_?increment@stl_input_iterator_impl@objects@python@boost@@QEAAXXZ) referenced in function "private: static void __cdecl boost::iterators::iterator_core_access::increment<struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >(struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &)" (??$increment@U?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@@iterator_core_access@iterators@boost@@CAXAEAU?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@2@@Z)
torrent_handle.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __cdecl boost::python::objects::stl_input_iterator_impl::increment(void)" (__imp_?increment@stl_input_iterator_impl@objects@python@boost@@QEAAXXZ)
session.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl boost::python::objects::stl_input_iterator_impl::equal(struct boost::python::objects::stl_input_iterator_impl const &)const " (__imp_?equal@stl_input_iterator_impl@objects@python@boost@@QEBA_NAEBU1234@@Z) referenced in function "bool __cdecl boost::iterators::operator!=<struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::input_iterator_tag,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,__int64,struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::input_iterator_tag,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,__int64>(class boost::iterators::iterator_facade<struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::input_iterator_tag,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,__int64> const &,class boost::iterators::iterator_facade<struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::input_iterator_tag,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,__int64> const &)" (??$?9U?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Uinput_iterator_tag@4@V34@_JU012@V34@U54@V34@_J@iterators@boost@@YA_NAEBV?$iterator_facade@U?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Uinput_iterator_tag@5@V45@_J@01@0@Z)
torrent_handle.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __cdecl boost::python::objects::stl_input_iterator_impl::equal(struct boost::python::objects::stl_input_iterator_impl const &)const " (__imp_?equal@stl_input_iterator_impl@objects@python@boost@@QEBA_NAEBU1234@@Z)
session.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class boost::python::handle<struct _object> const & __cdecl boost::python::objects::stl_input_iterator_impl::current(void)const " (__imp_?current@stl_input_iterator_impl@objects@python@boost@@QEBAAEBV?$handle@U_object@@@34@XZ) referenced in function "private: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl boost::iterators::iterator_core_access::dereference<struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >(struct boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > const &)" (??$dereference@U?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@@iterator_core_access@iterators@boost@@CA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBU?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@2@@Z)
torrent_handle.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class boost::python::handle<struct _object> const & __cdecl boost::python::objects::stl_input_iterator_impl::current(void)const " (__imp_?current@stl_input_iterator_impl@objects@python@boost@@QEBAAEBV?$handle@U_object@@@34@XZ)
session.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::~stl_input_iterator_impl(void)" (__imp_??1stl_input_iterator_impl@objects@python@boost@@QEAA@XZ) referenced in function "public: __cdecl boost::python::stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::~stl_input_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??1?$stl_input_iterator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@python@boost@@QEAA@XZ)
torrent_handle.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::~stl_input_iterator_impl(void)" (__imp_??1stl_input_iterator_impl@objects@python@boost@@QEAA@XZ)
torrent_handle.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: struct boost::python::detail::dict_base & __cdecl boost::python::detail::dict_base::operator=(struct boost::python::detail::dict_base &&)" (__imp_??4dict_base@detail@python@boost@@QEAAAEAU0123@$$QEAU0123@@Z) referenced in function "public: class boost::python::dict & __cdecl boost::python::dict::operator=(class boost::python::dict &&)" (??4dict@python@boost@@QEAAAEAV012@$$QEAV012@@Z)
torrent_handle.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::stl_input_iterator_impl(struct boost::python::objects::stl_input_iterator_impl const &)" (__imp_??0stl_input_iterator_impl@objects@python@boost@@QEAA@AEBU0123@@Z) referenced in function "public: __cdecl std::vector<int,class std::allocator<int> >::vector<int,class std::allocator<int> ><struct boost::python::stl_input_iterator<int const >,void>(struct boost::python::stl_input_iterator<int const >,struct boost::python::stl_input_iterator<int const >,class std::allocator<int> const &)" (??$?0U?$stl_input_iterator@$$CBH@python@boost@@X@?$vector@HV?$allocator@H@std@@@std@@QEAA@U?$stl_input_iterator@$$CBH@python@boost@@0AEBV?$allocator@H@1@@Z)
torrent_handle.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::stl_input_iterator_impl::stl_input_iterator_impl(struct boost::python::objects::stl_input_iterator_impl &&)" (__imp_??0stl_input_iterator_impl@objects@python@boost@@QEAA@$$QEAU0123@@Z) referenced in function "public: __cdecl std::vector<int,class std::allocator<int> >::vector<int,class std::allocator<int> ><struct boost::python::stl_input_iterator<int const >,void>(struct boost::python::stl_input_iterator<int const >,struct boost::python::stl_input_iterator<int const >,class std::allocator<int> const &)" (??$?0U?$stl_input_iterator@$$CBH@python@boost@@X@?$vector@HV?$allocator@H@std@@@std@@QEAA@U?$stl_input_iterator@$$CBH@python@boost@@0AEBV?$allocator@H@1@@Z)
binmsvc-14.1releaseaddress-model-64libtorrent.dll : fatal error LNK1120: 11 unresolved externals

在检查C:boost_1_65_1stageliblibboost_python-vc141-mt-1_65_1.lib时(使用dumpbin /EXPORTS),我检查了 dumpbin 的输出中是否存在所有符号,例如搜索identity_function得到这一行:

06B 00000000 SECT28 notype ()    External     | ?identity_function@objects@python@boost@@YAAEBVobject@api@23@XZ (class boost::python::api::object const & __cdecl boost::python::objects::identity_function(void))

我将这个库文件包含在我的 Jam 文件中。我还错过了什么?在构建时是否需要传递一些选项Boost.Python目前我正在使用bjam --with-python variant=release address-model=64构建它

根据 RbM 的建议,我将库包含在 JamFile 中,它删除了许多未解决的外部符号错误。其余的错误是通过将Boost.Python构建为共享并包括lib文件来修复的。现在我有一个完全不同的不相关的错误。