【发布时间】:2012-08-04 22:31:14
【问题描述】:
我使用 b2 和正确的 Python 配置编译了 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 链接。
【问题讨论】:
标签: c++ python boost boost-python