При использовании диспетчера пакетов Hunter для извлечения и предварительной компиляции Boost (1.69) через CMake (на примере минимального кода, см. Ссылку внизу) специально для MCVC (VS 2017), я получаюэти ошибки компоновщика:
1>module.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void * __cdecl boost::python::objects::find_static_type(void *,struct boost::python::type_info,struct boost::python::type_info)" (__imp_?find_static_type@objects@python@boost@@YAPEAXPEAXUtype_info@23@1@Z) referenced in function "private: virtual void * __cdecl boost::python::objects::value_holder<class World>::holds(struct boost::python::type_info,bool)" (?holds@?$value_holder@VWorld@@@objects@python@boost@@EEAAPEAXUtype_info@34@_N@Z)
1>module.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::converter::shared_ptr_deleter::shared_ptr_deleter(struct boost::python::converter::shared_ptr_deleter const &)" (__imp_??0shared_ptr_deleter@converter@python@boost@@QEAA@AEBU0123@@Z) referenced in function "public: __cdecl boost::detail::shared_count::shared_count<void *,struct boost::python::converter::shared_ptr_deleter>(void *,struct boost::python::converter::shared_ptr_deleter)" (??$?0PEAXUshared_ptr_deleter@converter@python@boost@@@shared_count@detail@boost@@QEAA@PEAXUshared_ptr_deleter@converter@python@2@@Z)
1>module.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl boost::python::objects::class_base::~class_base(void)" (__imp_??1class_base@objects@python@boost@@QEAA@XZ) referenced in function "int `public: __cdecl boost::python::class_<class World,struct boost::python::detail::not_specified,struct boost::python::detail::not_specified,struct boost::python::detail::not_specified>::class_<class World,struct boost::python::detail::not_specified,struct boost::python::detail::not_specified,struct boost::python::detail::not_specified>(char const *,char const *)'::`1'::dtor$0" (?dtor$0@?0???0?$class_@VWorld@@Unot_specified@detail@python@boost@@U2345@U2345@@python@boost@@QEAA@PEBD0@Z@4HA)
1>module.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl boost::python::objects::register_dynamic_id_aux(struct boost::python::type_info,struct std::pair<void *,struct boost::python::type_info> (__cdecl*)(void *))" (__imp_?register_dynamic_id_aux@objects@python@boost@@YAXUtype_info@23@P6A?AU?$pair@PEAXUtype_info@python@boost@@@std@@PEAX@Z@Z) referenced in function "void __cdecl boost::python::objects::register_dynamic_id<class World>(class World *)" (??$register_dynamic_id@VWorld@@@objects@python@boost@@YAXPEAVWorld@@@Z)
Уже сообщили об этой проблеме Хантеру здесь , но у кого-нибудь есть идеи, почему это может произойти?
Примечание: если я закомментирую код, выставляющий класс, просто выйдя из функции, ошибки не возникнут.Кроме того, пример кода включает в себя альтернативный CMakeLists_NoHunter.txt (который не использует Hunter, а просто предварительно скомпилировал двоичные файлы 1.69), и это прекрасно работает (когда им заменяется CMakeLists.txt).
Я искалвысоко и низко в сети для подобных проблем повышения с MSVC, но просто не могу найти ни одного.Кроме того, обратите внимание: определение BOOST_ALL_NO_LIB, кажется, не имеет никакого значения в случае Хантера, т.е. я все еще получаю ошибки компоновки.
Пример минимального кода: https://github.com/Algomorph/minimal_hunter_boost_python_example