使用VS2012的python 1.55.0比需要的方法少

使用VS2012的python 1.55.0比需要的方法少,python,c++,visual-studio-2012,boost,Python,C++,Visual Studio 2012,Boost,我下载了Boost1.55.0。从 我的Visual Studio的版本是11.0.50727.1 打开VS2012 x86本机工具命令提示符 光盘 bootstrap.bat b2.exe 编译后,console写道,一切都很顺利,我可以在\stage\lib中找到库 我找到了 我使用lib2def从libboost_python-vc110-mt-1_55.lib查找导出函数 结果列表: LIBRARY libboost_python-vc110-mt-1_55 EXPORTS "__CT

我下载了Boost1.55.0。从

我的Visual Studio的版本是11.0.50727.1

  • 打开VS2012 x86本机工具命令提示符
  • 光盘
  • bootstrap.bat

  • b2.exe 编译后,console写道,一切都很顺利,我可以在\stage\lib中找到库

  • 我找到了
  • 我使用lib2def从libboost_python-vc110-mt-1_55.lib查找导出函数
  • 结果列表:

    LIBRARY libboost_python-vc110-mt-1_55
    
    EXPORTS
    "__CT??_R0?AU?$error_info_injector@Vbad_function_call@boost@@@exception_detail@boost@@@8??0?$error_info_injector@Vbad_function_call@boost@@@exception_detail@boost@@QAE@ABU012@@Z32"
    "__CT??_R0?AUerror_already_set@python@boost@@@8??0error_already_set@python@boost@@QAE@ABU012@@Z4"
    "__CT??_R0?AV?$clone_impl@U?$error_info_injector@Vbad_function_call@boost@@@exception_detail@boost@@@exception_detail@boost@@@8??0?$clone_impl@U?$error_info_injector@Vbad_function_call@boost@@@exception_detail@boost@@@exception_detail@boost@@QAE@ABV012@@Z44"
    "__CT??_R0?AVbad_alloc@std@@@8??0bad_alloc@std@@QAE@ABV01@@Z12"
    "__CT??_R0?AVbad_cast@std@@@8??0bad_cast@std@@QAE@ABV01@@Z12"
    "__CT??_R0?AVbad_function_call@boost@@@8??0bad_function_call@boost@@QAE@ABV01@@Z12"
    "__CT??_R0?AVbad_numeric_cast@numeric@boost@@@8??0bad_numeric_cast@numeric@boost@@QAE@ABV012@@Z12"
    "__CT??_R0?AVclone_base@exception_detail@boost@@@8??0clone_base@exception_detail@boost@@QAE@ABV012@@Z40324"
    "__CT??_R0?AVexception@boost@@@8??0exception@boost@@QAE@ABV01@@Z2012"
    "__CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12"
    "__CT??_R0?AVinvalid_argument@std@@@8??0invalid_argument@std@@QAE@ABV01@@Z12"
    "__CT??_R0?AVlogic_error@std@@@8??0logic_error@std@@QAE@ABV01@@Z12"
    "__CT??_R0?AVnegative_overflow@numeric@boost@@@8??0negative_overflow@numeric@boost@@QAE@ABV012@@Z12"
    "__CT??_R0?AVpositive_overflow@numeric@boost@@@8??0positive_overflow@numeric@boost@@QAE@ABV012@@Z12"
    "__CT??_R0?AVrange_error@std@@@8??0range_error@std@@QAE@ABV01@@Z12"
    "__CT??_R0?AVruntime_error@std@@@8??0runtime_error@std@@QAE@ABV01@@Z12"
    "__CTA1?AUerror_already_set@python@boost@@"
    "__CTA2?AVbad_alloc@std@@"
    "__CTA3?AVinvalid_argument@std@@"
    "__CTA3?AVrange_error@std@@"
    "__CTA4?AVnegative_overflow@numeric@boost@@"
    "__CTA4?AVpositive_overflow@numeric@boost@@"
    "__CTA7?AV?$clone_impl@U?$error_info_injector@Vbad_function_call@boost@@@exception_detail@boost@@@exception_detail@boost@@"
    "__TI1?AUerror_already_set@python@boost@@"
    "__TI2?AVbad_alloc@std@@"
    "__TI3?AVinvalid_argument@std@@"
    "__TI3?AVrange_error@std@@"
    "__TI4?AVnegative_overflow@numeric@boost@@"
    "__TI4?AVpositive_overflow@numeric@boost@@"
    "__TI7?AV?$clone_impl@U?$error_info_injector@Vbad_function_call@boost@@@exception_detail@boost@@@exception_detail@boost@@"
    "encode_string_unaryfunc"
    "identity_unaryfunc"
    "no_init"
    "wmemcpy"
    "wmemmove"
    "wmemset"
    
    我需要这个库中的所有boost::python函数,如何解决这个问题

    更新: 我不知道为什么,也许这就是问题所在,但VS2012正在尝试加载“boost_python-vc110-mt-gd-1_55.lib”(如果没有这样的文件,我会出现链接器错误)。如何使其不链接动态而不是静态?如何命令我的项目使用静态库? 在我的项目中没有关于它应该使用哪个库的任何设置,这就是boost自动链接功能

    更新2:
    我找到了解决方案——如果我动态构建boost_python库,一切都会正常工作。我的编译器(来自VS2012)希望所有的boost库都是静态的,但boost_python只是动态的。所以当我给他python的静态版本时,他拒绝了。我不知道为什么以及如何管理它,但这是第二个问题I的主体。

    尝试文件上的
    DUMPBIN/SYMBOLS
    。它是否显示了您需要的符号?DuppBin附带VisualC++。请注意,LIbBoox*文件是静态库。如果您试图动态链接到DLL版本,请查看boost_python-vc110-mt-1_55.lib谢谢,使用DumpBin我获得了9,5 Mb的文本,具有不同的外部类型和函数。所以,我认为我遇到麻烦的原因可能是在建筑物的版本中:我在VS中的项目缺少功能是x32,但boost可以在x64中构建。这就是为什么lib2def(即x32)只看到了30个外部,但VS命令提示符和dumpbin却发现了更多。我现在更新了VS 2012以更新4(我认为可能存在问题),现在我用新的更新版本重建了整个boost。当它结束时,我会检查我的建议,我在上面写的。我希望这就是原因。非常感谢:-)我已按顺序构建:b2.exe地址模型=32架构=x86-结果仍然相同:-(