Итак, я пытаюсь встроить Python в C++. Я довольно далеко зашел и смог сделать основные вещи, например, запустить строки Python. Как только я попытался использовать Boost :: Python :: Object, я начал получать эти 4 ошибки компоновщика.Использование Boost :: Python :: Object вызывает ошибки компоновщика
Я построил boost с помощью BJAM с Boost 1.54.0 и Python 2.7.5.
Python Lib сборки Команды:
bootstrap
.\b2 toolset=msvc-10.0 --with-python
Minimal Пример кода:
#include <boost/python.hpp>
#include <iostream>
int main(int, char **)
{
Py_Initialize();
PyRun_SimpleString("import Entity");
boost::python::object main_module = boost::python::import("__main__");
boost::python::object main_namespace = main_module.attr("__dict__");
Py_Finalize();
std::cin.get();
return 0;
}
компоновщика ошибки:
1>PythonTest.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class boost::python::api::object __cdecl boost::python::import(class boost::python::str)" ([email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function _main
1>PythonTest.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) protected: __thiscall boost::python::detail::str_base::str_base(char const *)" ([email protected]@[email protected]@@[email protected]@Z) referenced in function "public: __thiscall boost::python::str::str(char const *)" ([email protected]@[email protected]@[email protected]@Z)
1>E:\Dev\PythonTest\Debug\PythonTest.exe : fatal error LNK1120: 2 unresolved externals
Убедитесь, что 'PythonTest.exe' связан с библиотекой Boost.Python. Кроме того, вы ** не ** хотите вызывать 'Py_Finalize()' при использовании Boost.Python. –
Я дважды проверял, и я связываюсь с boost python. Могу ли я спросить, почему я не должен использовать Py_Finalize()? Что это значит? – user947871
Boost.Python не поддерживает безопасный вызов 'Py_Finalize()'. Короче говоря, некоторые внутренние объекты Boost.Python останутся в живых во время 'Py_Finalize()' и будут пытаться удаляться только при выгрузке Boost.Python, в результате чего объекты будут пытаться удалить с несуществующим интерпретатором. Это отмечено в разделе [Вложение - Начало работы] (http://www.boost.org/doc/libs/1_54_0/libs/python/doc/tutorial/doc/html/python/embedding.html) и перечислено в [TODO] (http://www.boost.org/doc/libs/1_54_0/libs/python/todo.html#pyfinalize-safety). –