[英]Using Boost::Python::Object causes linker errors
所以,我試圖將Python嵌入到C ++中。 我已經相當遠,並且能夠做基本的事情,比如運行Python的字符串。 一旦我嘗試使用Boost :: Python :: Object,我就開始收到這4個鏈接器錯誤。
我使用BJAM和Boost 1.54.0以及Python 2.7.5構建了boost。
Python Lib構建命令:
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
可以為靜態或動態鏈接構建Boost.Python。 這由在構建過程中定義或未定義的BOOST_PYTHON_STATIC_LIB
控制。 boost郵件列表似乎表明這種定義和內置類型是一些混亂的結果。
如果BOOST_PYTHON_STATIC_LIB
,則Boost.Python將采用動態鏈接。 因此,Boost.Python為dllimport和dllexport設置符號可見性。 基於鏈接器錯誤,示例代碼期望在鏈接期間boost::python::import()
函數。 如果您已經驗證Boost.Python庫正在鏈接,那么問題很可能是為靜態鏈接構建Boost.Python的結果,其中函數沒有為導出進行修飾。 要解決此問題,請執行以下操作之一:
BOOST_PYTHON_STATIC_LIB
)。 BOOST_PYTHON_STATIC_LIB
。 BOOST_PYTHON_STATIC_LIB
包括之前在示例代碼boost/python.hpp
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.