簡體   English   中英

使用Boost :: Python :: Object會導致鏈接器錯誤

[英]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(即確保BOOST_PYTHON_STATIC_LIB )。
  • 在構建示例代碼時定義BOOST_PYTHON_STATIC_LIB
  • 限定BOOST_PYTHON_STATIC_LIB包括之前在示例代碼boost/python.hpp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM