Python快速启动链接器错误

Python快速启动链接器错误,python,c++,visual-c++,boost,boost-python,Python,C++,Visual C++,Boost,Boost Python,我只是试着按照说明让快速入门示例正常工作。我在Windows7上尝试使用MSVC。我已经安装了Python 2.7 我所做的: 下载boost_1_57_0.zip并解压缩到C:\boost_1_57_0 从C:\boost\u 1\u 57\u 0中的命令提示符运行: bootstrap 然后: 按照5.1中的说明。在此之后,我有一条消息说:“成功地构建了Boost C++库!” 将C:\boost\u 1\u 57\u 0添加到我的路径。指令并没有说要这样做,但既然他们想让我调用bjam

我只是试着按照说明让快速入门示例正常工作。我在Windows7上尝试使用MSVC。我已经安装了Python 2.7

我所做的:

  • 下载boost_1_57_0.zip并解压缩到
    C:\boost_1_57_0
  • C:\boost\u 1\u 57\u 0
    中的命令提示符运行:

    bootstrap
    
    然后:

    按照5.1中的说明。在此之后,我有一条消息说:“成功地构建了Boost C++库!”
  • C:\boost\u 1\u 57\u 0
    添加到我的路径。指令并没有说要这样做,但既然他们想让我调用bjam,而bjam就住在那里,我想我需要这样做
  • 修改
    C:\boost\u 1\u 57\u 0\libs\python\example\quickstart\boost build.jam
    ,使路径为
    boost build../../../../tools/build/src而不是
    boostbuild../../../../../tools/build/v2。这是按照说明进行的,因为原始路径是错误的,如果不这样做,bjam调用将失败
  • 将CD放入
    C:\boost\u 1\u 57\u 0\libs\python\example\quickstart
    并运行:

    bjam toolset=msvc --verbose-test test
    
我得到的输出首先是:

...patience...
...patience...
...found 1926 targets...
...updating 55 targets...
common.mkdir bin
common.mkdir bin\test_ext.test
common.mkdir bin\test_ext.test\msvc-12.0
common.mkdir bin\test_ext.test\msvc-12.0\debug
common.mkdir bin\test_ext.test\msvc-12.0\debug\threading-multi
common.mkdir bin\msvc-12.0
common.mkdir bin\msvc-12.0\debug
common.mkdir bin\msvc-12.0\debug\threading-multi
compile-c-c++ bin\msvc-12.0\debug\threading-multi\extending.obj
extending.cpp
c:\python27\include\pymath.h(22) : warning C4273: 'round' : inconsistent dll linkage
    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\math.h(516) : see previous definition of 'round'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xtgmath.h(190) : warning C4273: '_hypot' : inconsistent dll linkage
接着是一长串其他头文件条目,每个条目都抱怨dll链接不一致,最后是一堆错误,其中突出显示的包括:

LINK : fatal error LNK1207: incompatible PDB format in 'C:\boost_1_57_0\libs\python\example\quickstart\bin\msvc-12.0\debug\threading-multi\extending.pdb'; delete and rebuild

...failed msvc.link.dll bin\msvc-12.0\debug\threading-multi\extending.pyd bin\msvc-12.0\debug\threading-multi\extending.pdb...
...removing bin\msvc-12.0\debug\threading-multi\extending.pdb

LINK : warning LNK4001: no object files specified; libraries used
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
bin\test_embed.test\msvc-12.0\debug\threading-multi\test_embed.exe : fatal error LNK1120: 1 unresolved externals

...failed msvc.link bin\test_embed.test\msvc-12.0\debug\threading-multi\test_embed.exe bin\test_embed.test\msvc-12.0\debug\threading-multi\test_embed.pdb...
...removing bin\test_embed.test\msvc-12.0\debug\threading-multi\test_embed.pdb
...skipped <pbin\test_embed.test\msvc-12.0\debug\threading-multi>test_embed.run for lack of <pbin\test_embed.test\msvc-12.0\debug\threading-multi>test_embed.exe...
...failed updating 4 targets...
链接:致命错误LNK1207:C:\boost\u 1\u 57\u 0\libs\python\example\quickstart\bin\msvc-12.0\debug\threading multi\extensing.PDB'中的PDB格式不兼容;删除并重建
…失败的msvc.link.dll bin\msvc-12.0\debug\threading multi\extensing.pyd bin\msvc-12.0\debug\threading multi\extensing.pdb。。。
…正在删除bin\msvc-12.0\debug\threading multi\extensing.pdb
链接:警告LNK4001:未指定对象文件;使用的图书馆
链接:错误LNK2001:未解析的外部符号\u mainCRTStartup
bin\test\u embed.test\msvc-12.0\debug\threading multi\test\u embed.exe:致命错误LNK1120:1未解析外部
…msvc.link bin\test\u embed.test\msvc-12.0\debug\threading multi\test\u embed.exe bin\test\u embed.test\msvc-12.0\debug\threading multi\test\u embed.pdb失败。。。
…正在删除bin\test\u embed.test\msvc-12.0\debug\threading multi\test\u embed.pdb
…由于缺少test\u embed.exe,跳过了test\u embed.run。。。
…更新4个目标失败。。。

有什么想法吗?

我也看到了PDB格式不兼容的问题,但仅在1.57中出现过,这(因为Boost.Python源代码对于1.57和1.55是相同的,我可以在1.55上运行),我猜这与Boost::build路径中的更改有一定关系


我必须让它使用1.55,也许这会有一些帮助。

1.59仍然存在问题。我已设法通过编辑文件使Boost.Build重新工作:

D:\boost\boost_1_59_0\tools\build\src\tools\msvc.jam
我做了两个改变:

  • 更改此项(第1351-1355行):

    generators.register[新建msvc链接生成器msvc.link.dll:
    OBJ搜索的库静态库导入库:共享库导入库:
    msvc假];
    generators.register[新建msvc链接生成器msvc.link.dll:
    OBJ搜索库静态库导入库:共享库:
    msvc真];
    
    致:

    generators.register[新建msvc链接生成器msvc.link.dll:
    OBJ搜索的库静态库导入库:共享库导入库:
    msvc];
    
  • 删除此行(#1472):

    toolset.flags msvc.link.dll LINKFLAGS true:/NOENTRY;
    
  • 我已经用VS2012和Python 2.7在Win7上测试了这一点。

    我告诉你,疯狂

    无论如何,我最终成功地在boost_1_68_0上构建了快速入门示例。 快速指南:

    • (在windows上,安装了visual studio 2017和SDK,安装了python 3.5)
    • 下载并解压缩它,如C:\boost\u 1\u 68\u 0
    • 运行bootstrap.bat
    • 构建boost python库:
    C:\boost\u 1\u 68\u 0>\b2——使用python-j4

    • 转到C:\boost\u 1\u 68\u 0\libs\python\example,修复Jamroot以查找头文件
    项目
    :要求
    C:\\boost\u 1\u 68\u 0
    
    boost_python
    谢谢,很抱歉我不得不离开这里,几个月没有再尝试,但现在我已经按照链接的说明进行了操作,它似乎可以工作了。对于其他人:似乎最简单的方法是使用1.55,因为1.56及以上版本存在pdb格式问题。另外,我认为我不会像你建议的那样设置user-config.jam。顺便说一句,你的博客user-config.jam中有一个输入错误-你在这里拼写错了“python”:“C:\\Pyhton27-32\\libs#link libs”。我已经更新了要点,谢谢你指出这个错误。另外,1.59也将在下周发布,我希望到时候可以修复。我可以确认当前的
    boost 1.62也有同样的问题。此修复程序正在运行(在Windows 10上使用
    msvc-12
    python-3.4
    进行了测试)。
    D:\boost\boost_1_59_0\tools\build\src\tools\msvc.jam
    
         generators.register [ new msvc-linking-generator msvc.link.dll :
             OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB : SHARED_LIB IMPORT_LIB :
             <toolset>msvc <suppress-import-lib>false ] ;
         generators.register [ new msvc-linking-generator msvc.link.dll :
             OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB : SHARED_LIB :
             <toolset>msvc <suppress-import-lib>true ] ;
    
        generators.register [ new msvc-linking-generator msvc.link.dll :
            OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB : SHARED_LIB IMPORT_LIB :
            <toolset>msvc ] ;
    
        toolset.flags msvc.link.dll LINKFLAGS <suppress-import-lib>true : /NOENTRY ;