ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c – Windows / MSVC10下的Boost.Python链接错误

2019-08-26 06:57:26  阅读:258  来源: 互联网

标签:boost-python python c boost


我使用正确的Python配置使用b2编译了boost 1.50.0库.这是命令b2 –debug-configuration的相关输出:

notice: [python-cfg] Configuring python...
notice: [python-cfg]   user-specified cmd-or-prefix: "C:\Python33z\python"
notice: [python-cfg] Checking interpreter command "C:\Python33z\python"...
notice: [python-cfg] running command 'DIR /-C /A:S "C:\Python33z\python.exe" 2>&
1'
notice: [python-cfg] running command '"C:\Python33z\python" -c "from sys import
*; print('version=%d.%d\nplatform=%s\nprefix=%s\nexec_prefix=%s\nexecutable=%s'
% (version_info[0],version_info[1],platform,prefix,exec_prefix,executable))" 2>&
1'    notice: [python-cfg] Configuring python...
notice: [python-cfg]   user-specified cmd-or-prefix: "C:\Python33z\python"
notice: [python-cfg] Checking interpreter command "C:\Python33z\python"...
notice: [python-cfg] running command 'DIR /-C /A:S "C:\Python33z\python.exe" 2>&
1'
notice: [python-cfg] running command '"C:\Python33z\python" -c "from sys import
*; print('version=%d.%d\nplatform=%s\nprefix=%s\nexec_prefix=%s\nexecutable=%s'
% (version_info[0],version_info[1],platform,prefix,exec_prefix,executable))" 2>&
1'
notice: [python-cfg] ...requested configuration matched!
notice: [python-cfg] Details of this Python configuration:
notice: [python-cfg]   interpreter command: "C:\Python33z\python"
notice: [python-cfg]   include path: "C:\Python33z\Include"
notice: [python-cfg]   library path: "C:\Python33z\libs"
notice: [python-cfg]   DLL search path: "C:\Python33z"
notice: [msvc-cfg] msvc-10.0 detected, command: 'C:\Program Files (x86)\Microsof
t Visual Studio 10.0\VC\bin\cl.exe'
notice: will use 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.
exe' for msvc, condition <toolset>msvc-10.0

...updating 4 targets...
msvc.archive bin.v2\libs\python\build\msvc-10.0\debug\link-static\threading-mult
i\libboost_python3-vc100-mt-gd-1_50.lib
common.copy stage\lib\libboost_python3-vc100-mt-gd-1_50.lib
bin.v2\libs\python\build\msvc-10.0\debug\link-static\threading-multi\libboost_py
thon3-vc100-mt-gd-1_50.lib
        1 file(s) copied.
msvc.archive bin.v2\libs\python\build\msvc-10.0\release\link-static\threading-mu
lti\libboost_python3-vc100-mt-1_50.lib
common.copy stage\lib\libboost_python3-vc100-mt-1_50.lib
bin.v2\libs\python\build\msvc-10.0\release\link-static\threading-multi\libboost_
python3-vc100-mt-1_50.lib
        1 file(s) copied.
...updated 4 targets...


The Boost C++ Libraries were successfully built!

我已正确设置链接器目录并链接到相应的输出文件(libboost_
发布时为python3-vc100-mt-1_50.lib,调试时为libboost_python3-vc100-mt-gd-1_50.lib.我正在使用自编译的python发行版,但我也试过了标准的发行版,结果没有任何不同.

我编译时遇到的链接错误是:

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)
error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall boost::python::detail::str_base::~str_base(void)" (__imp_??1str_base@detail@python@boost@@QAE@XZ) referenced in function "public: __thiscall boost::python::str::~str(void)" (??1str@python@boost@@QAE@XZ)
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
fatal error LNK1120: 3 unresolved externals

产生这些错误的测试代码归结为:

using namespace boost::python;
object main_module = import("__main__");

我使用了具有相同构建配置的Boost.Filesystem,它没有给我带来任何问题.

我希望有人可以帮我解决这个问题,这真让我感到困惑!

更新:我刚读了一些关于定义BOOST_PYTHON_STATIC_LIB的模糊文本;我不确定我是否朝着正确的方向前进(因为afaik在构建过程中没有提到),但不管怎样,它给了我一个更令人困惑的错误:

LINK : fatal error LNK1104: cannot open file 'python27.lib'

当python-cfg输出清楚地显示它发现我的python33 dist(我的应用程序已经链接了; python33.lib)时,我不知道为什么它试图链接到那个lib.

解决方法:

第一个问题:事实证明定义BOOST_PYTHON_STATIC_LIB确实是修复未解决的外部链接错误的正确方法.当与静态lib链接时,它似乎是必要的定义;这似乎很明显,但这里没有提到:http://www.boost.org/doc/libs/1_50_0/libs/python/doc/building.html.

第二个问题:在添加了这个定义之后,发生了下一个链接错误,因为我在使用正确的Python配置重新构建之前没有运行b2 clean(即,在清理之前没有重新编译!),这应该是显而易见的缺乏编译器相关的输出,但它确实欺骗了我,所以这只是另一件小事需要注意.

标签:boost-python,python,c,boost
来源: https://codeday.me/bug/20190826/1727525.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有