Optimistic76 Ответов: 0

Как скомпилировать boost.python 1.72 для msvc14.0 (visual studio express 2015)


Я пытаюсь скопировать пример того, как создать модуль, вызываемый из python3.7.

Я думаю, что сделал все шаги правильно, но при компиляции проекта я получаю
много неразрешенных ошибок символов (lnk2019).

Источники очень просты:

#include <iostream>
#define BOOST_PYTHON_STATIC_LIB    
#include <boost\python.hpp>

using namespace boost::python;

void sayHello()
{
	std::cout << "Hello, Python!\n";
}

BOOST_PYTHON_MODULE(mantid)  // Name here must match the name of the final shared library, i.e. mantid.dll or mantid.so
{
	boost::python::def("sayHello", &sayHello);
}



Я думаю, что правильно настроил все каталоги


Я скомпилировал его с помощью этого файла .bat


call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86
 
call bootstrap.bat
 
rem Most libraries can be static libs
b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 --with-python install



[редактировать]
precisely 7 unresolved symbols (sorry for the ugly format deriving from copy and paste):

unresolved external symbol "class boost::python::api::object __cdecl boost::python::objects::function_object(struct boost::python::objects::py_function const &)" (?function_object@objects@python@boost@@YA?AVobject@api@23@AEBUpy_function@123@@Z)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	
unresolved external symbol "public: struct _typeobject const * __cdecl boost::python::converter::registration::expected_from_python_type(void)const " (?expected_from_python_type@registration@converter@python@boost@@QEBAPEBU_typeobject@@XZ)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	
unresolved external symbol "public: virtual unsigned int __cdecl boost::python::objects::py_function_impl_base::max_arity(void)const " (?max_arity@py_function_impl_base@objects@python@boost@@UEBAIXZ)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	
unresolved external symbol "public: virtual __cdecl boost::python::objects::py_function_impl_base::~py_function_impl_base(void)" (??1py_function_impl_base@objects@python@boost@@UEAA@XZ)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	
unresolved external symbol "struct boost::python::converter::registration const * __cdecl boost::python::converter::registry::query(struct boost::python::type_info)" (?query@registry@converter@python@boost@@YAPEBUregistration@234@Utype_info@34@@Z)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	
unresolved external symbol "struct _object * __cdecl boost::python::detail::init_module(struct PyModuleDef &,void (__cdecl*)(void))" (?init_module@detail@python@boost@@YAPEAU_object@@AEAUPyModuleDef@@P6AXXZ@Z)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	
unresolved external symbol "void __cdecl boost::python::detail::scope_setattr_doc(char const *,class boost::python::api::object const &,char const *)" (?scope_setattr_doc@detail@python@boost@@YAXPEBDAEBVobject@api@23@0@Z)	BoostPython	C:\work\VC++ Projects\BoostPython\BoostPython\main.obj	1	Build	

[/редактировать]

Что я уже пробовал:

Я перепробовал все, но действительно не могу скомпилировать проект.

Чего мне не хватает?

Richard MacCutchan

"много неразрешенных ошибок символов"
Что это такое?

Optimistic76

ровно 7 неразрешенных символов (извините за уродливый формат, вытекающий из копирования и вставки):

неразрешенный внешний символ "класс усиления::питон::индекс::объекта как __cdecl наддува::питон::объекты::function_object(структура, тип Boost::питон::объекты::py_function как const &ампер;)" (?function_object@объектах@питона@форсировать@@я?AVobject@api@23@AEBUpy_function@123@@Z) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build
неразрешенных внешних символ "общественности: структура _typeobject как const * как __cdecl наддува::питон::конвертер::Регистрация::expected_from_python_type(ничтожным)константный" (?expected_from_python_type@Регистрация@конвертера@питона@форсировать@@QEBAPEBU_typeobject@@XZ не) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build
неразрешенных внешних символ "общественности: виртуальный беззнаковый инт как __cdecl наддува::питон::объекты::py_function_impl_base::max_arity(ничтожным)константный" (?max_arity@py_function_impl_base@объектах@питона@форсировать@@UEBAIXZ) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build
неразрешенных внешних символ "общественности: виртуальный как __cdecl наддува::питон::объекты::py_function_impl_base::~py_function_impl_base(ничтожным)" (??1py_function_impl_base@объектах@питона@форсировать@@UEAA@XZ не) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build
неразрешенный внешний символ "структура наддува::питон::конвертер::Регистрация константные * как __cdecl наддува::питон::конвертер::реестр::запрос(структура, тип Boost::питон::type_info)" (?запрос@реестре@конвертера@питона@форсировать@@YAPEBUregistration@234@Utype_info@34@@з) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build
неразрешенный внешний символ "структура _object * как __cdecl наддува::питон::подробно::функции init_module(структура PyModuleDef &амп;,пустота (как__cdecl*)(недействительными))" (?функции init_module@деталь@питона@форсировать@@YAPEAU_object@@AEAUPyModuleDef@@P6AXXZ@з) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build
неразрешенный внешний символ "Void и как __cdecl наддува::питон::подробно::scope_setattr_doc(const чарса *класс усиления::питон::индекс::Объект const &амп;,const чарса *)" (?scope_setattr_doc@деталь@питона@форсировать@@YAXPEBDAEBVobject@АПИ@23@0@z не) BoostPython C:\work\VC++ Projects\BoostPython\BoostPython\main.obj 1 Build

Richard MacCutchan

В вашей сборке отсутствует ссылка на библиотеку. Проверьте, какая библиотека boost (или библиотеки) содержит определения для всех этих ссылок, и добавьте ее в проект.

Optimistic76

Я не думаю, что это так. Я уже добавил Все ссылки, но ошибки все равно появляются

Richard MacCutchan

Ну, вы либо упускаете ссылку, либо вызываете внешние функции, которых не существует. В любом случае вам нужно проверить документацию boost.

Optimistic76

Ну а если я скомпилирую boost 32bit, то все будет в порядке. Проблема заключается в 64-битной версии.
Я попробовал установить winpython 32bit и 64bit

Richard MacCutchan

Вы не можете смешивать 32 и 64 бит. Выбирайте одно или другое и придерживайтесь его.

0 Ответов