Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Boost::Python::Object会导致链接器错误 所以,我正试图将Python嵌入C++中。我在这方面已经取得了相当大的进步,并且能够做一些基本的事情,比如运行Python的字符串。当我尝试使用Boost::Python::Object时,我开始出现以下4个链接器错误_C++_Boost_Scripting_Boost Python_Python Embedding - Fatal编程技术网

使用Boost::Python::Object会导致链接器错误 所以,我正试图将Python嵌入C++中。我在这方面已经取得了相当大的进步,并且能够做一些基本的事情,比如运行Python的字符串。当我尝试使用Boost::Python::Object时,我开始出现以下4个链接器错误

使用Boost::Python::Object会导致链接器错误 所以,我正试图将Python嵌入C++中。我在这方面已经取得了相当大的进步,并且能够做一些基本的事情,比如运行Python的字符串。当我尝试使用Boost::Python::Object时,我开始出现以下4个链接器错误,c++,boost,scripting,boost-python,python-embedding,C++,Boost,Scripting,Boost Python,Python Embedding,我使用BJAM和boost1.54.0以及python2.7.5构建了boost Python库构建命令: bootstrap .\b2 toolset=msvc-10.0 --with-python #include <boost/python.hpp> #include <iostream> int main(int, char **) { Py_Initialize(); PyRun_SimpleString("import Entity");

我使用BJAM和boost1.54.0以及python2.7.5构建了boost

Python库构建命令:

bootstrap
.\b2 toolset=msvc-10.0 --with-python
#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)" (__imp_?import@python@boost@@YA?AVobject@api@12@Vstr@12@@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 *)" (__imp_??0str_base@detail@python@boost@@IAE@PBD@Z) referenced in function "public: __thiscall boost::python::str::str(char const *)" (??0str@python@boost@@QAE@PBD@Z)
1>E:\Dev\PythonTest\Debug\PythonTest.exe : fatal error LNK1120: 2 unresolved externals
最小代码示例:

bootstrap
.\b2 toolset=msvc-10.0 --with-python
#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)" (__imp_?import@python@boost@@YA?AVobject@api@12@Vstr@12@@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 *)" (__imp_??0str_base@detail@python@boost@@IAE@PBD@Z) referenced in function "public: __thiscall boost::python::str::str(char const *)" (??0str@python@boost@@QAE@PBD@Z)
1>E:\Dev\PythonTest\Debug\PythonTest.exe : fatal error LNK1120: 2 unresolved externals

Python可以为静态或动态链接而构建。这是由在构建过程中定义或未定义的
BOOST\u PYTHON\u STATIC\u LIB
控制的。这似乎表明这个定义和构建类型是一些混淆的结果

如果未定义
BOOST\u PYTHON\u STATIC\u LIB
,则BOOST.PYTHON采用动态链接。因此,Boost.Python装饰了的符号可见性。基于链接器错误,示例代码希望在链接期间导入
boost::python::import()
函数。如果您已经验证了Boost.Python库正在被链接,那么问题很可能是Boost.Python为静态链接而构建的结果,在静态链接中,函数没有被修饰以进行导出。要解决此问题,请执行以下操作之一:

  • 为动态链接构建Boost.Python(即确保未定义
    Boost\u Python\u STATIC\u LIB
  • 在构建示例代码时定义
    BOOST\u PYTHON\u STATIC\u LIB
  • 在包含
    BOOST/PYTHON.hpp
    之前,在示例代码中定义
    BOOST\u PYTHON\u STATIC\u LIB

Boost.Python可以构建用于静态或动态链接。这是由在构建过程中定义或未定义的
BOOST\u PYTHON\u STATIC\u LIB
控制的。这似乎表明这个定义和构建类型是一些混淆的结果

如果未定义
BOOST\u PYTHON\u STATIC\u LIB
,则BOOST.PYTHON采用动态链接。因此,Boost.Python装饰了的符号可见性。基于链接器错误,示例代码希望在链接期间导入
boost::python::import()
函数。如果您已经验证了Boost.Python库正在被链接,那么问题很可能是Boost.Python为静态链接而构建的结果,在静态链接中,函数没有被修饰以进行导出。要解决此问题,请执行以下操作之一:

  • 为动态链接构建Boost.Python(即确保未定义
    Boost\u Python\u STATIC\u LIB
  • 在构建示例代码时定义
    BOOST\u PYTHON\u STATIC\u LIB
  • 在包含
    BOOST/PYTHON.hpp
    之前,在示例代码中定义
    BOOST\u PYTHON\u STATIC\u LIB

验证
PythonTest.exe
是否链接到Boost.Python库。另外,在使用Boost.Python时,您不想调用
Py\u Finalize()
。我仔细检查了一下,并且正在链接Boost-Python。请问为什么我不应该使用Py_Finalize()?这会导致什么?Boost.Python不支持安全调用
Py\u Finalize()
。简而言之,一些内部Boost.Python对象将在
Py_Finalize()
期间保持活动状态,并且仅在Boost.Python卸载时尝试删除,从而导致对象尝试使用不存在的解释器删除。这一点在本节中有所说明,并在中列出。我感谢您的帮助,但我仍然会遇到这些错误。符号可见性看起来像是
PythonTest
希望Boost.Python库是为动态链接而构建的。在构建的Boost.Python库中检查符号可见性可能是值得的。如果未导出符号,则在构建
PythonTest
或包含
BOOST/PYTHON.hpp
之前,通过定义
BOOST\u PYTHON\u static\u LIB
尝试为静态库构建。验证
PythonTest.exe
是否链接到BOOST.PYTHON库。另外,在使用Boost.Python时,您不想调用
Py\u Finalize()
。我仔细检查了一下,并且正在链接Boost-Python。请问为什么我不应该使用Py_Finalize()?这会导致什么?Boost.Python不支持安全调用
Py\u Finalize()
。简而言之,一些内部Boost.Python对象将在
Py_Finalize()
期间保持活动状态,并且仅在Boost.Python卸载时尝试删除,从而导致对象尝试使用不存在的解释器删除。这一点在本节中有所说明,并在中列出。我感谢您的帮助,但我仍然会遇到这些错误。符号可见性看起来像是
PythonTest
希望Boost.Python库是为动态链接而构建的。在构建的Boost.Python库中检查符号可见性可能是值得的。如果未导出符号,则在构建
PythonTest
或包含
BOOST/PYTHON.hpp
之前,通过定义
BOOST\u PYTHON\u static\u LIB
尝试为静态库构建。