Boost.Python 快速入门链接器错误
Boost.Python Quickstart Linker Errors
我只是想按照说明 here 让快速入门示例正常工作。我在 Windows 7 并尝试使用 MSVC。我安装了 Python 2.7。
我做了什么:
- 下载 boost_1_57_0.zip 并解压到
C:\boost_1_57_0
。
从 C:\boost_1_57_0
中的命令提示符,运行:
bootstrap
然后:
.\b2
按照 5.1 here 下的说明进行操作。在此之后我收到一条消息说 "The Boost C++ Libraries were successfully built!".
- 将
C:\boost_1_57_0
添加到我的路径中。说明并没有说要这样做,但由于他们要我调用 bjam,而这就是它所在的位置,我想我需要这样做。
- 修改
C:\boost_1_57_0\libs\python\example\quickstart\boost-build.jam
使路径为 boost-build ../../../../tools/build/src ;
而不是 boost-build ../../../../tools/build/v2 ;
。这是按照说明 here 进行的,因为原始路径是错误的,如果您不这样做,bjam 调用将失败。
CD 变成 C:\boost_1_57_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...
有什么想法吗?
我还看到了不兼容的 PDB 格式问题,但仅限于 1.57,这(因为 Boost.Python 源对于 1.57 和 1.55 是相同的,我可以让它在 1.55 上工作)我猜是某种程度上与 boost::build 路径的变化有关。
我已经 documented what I had to do 让它与 1.55 一起工作,也许这会有一些帮助。
问题仍然存在于 1.59。通过编辑文件,我设法让 Boost.Build 再次工作:
D:\boost\boost_1_59_0\tools\build\src\tools\msvc.jam
我做了两处修改:
更改此(第 1351-1355 行):
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 ] ;
删除这一行 (#1472):
toolset.flags msvc.link.dll LINKFLAGS <suppress-import-lib>true : /NOENTRY ;
我已经在 Win7 上用 VS2012 和 Python 2.7 测试过这个。
疯狂我告诉你。
无论如何,我终于在boost_1_68_0上成功构建了快速入门示例。
快速指南:
- (在 windows、visual studio 2017 和已安装 SDK,已安装 python 3.5)
- 下载解压到C:\boost_1_68_0
- 运行 bootstrap.bat
- 构建 boost-python 库:
C:\boost_1_68_0>.\b2 --with-python -j4
- 转到 C:\boost_1_68_0\libs\python\example,修复 Jamroot 以找到您的头文件
project
: requirements
<include>C:\boost_1_68_0
<library>boost_python
- 修复 tools\build\src\tools\msvc.jam 文件中 Ralph post 评论的方式
- 如 here 所述,通过在所有地方添加“#define BOOST_PYTHON_STATIC_LIB”作为第一行来修补 embedding.cpp 和 extending.cpp
- 将构建的 python-boost 库(从 C:\boost_1_68_0\stage\lib)复制到 quickstart 文件夹
- 最终构建它
C:\boost_1_68_0\libs\python\example\quickstart>..\..\..\..\b2.exe -j4
同样,这太复杂了。所有其他的东西构建得很好,但是 python 链接真的坏了。无论如何,如果有人尝试,希望这会有所帮助。
我只是想按照说明 here 让快速入门示例正常工作。我在 Windows 7 并尝试使用 MSVC。我安装了 Python 2.7。
我做了什么:
- 下载 boost_1_57_0.zip 并解压到
C:\boost_1_57_0
。 从
C:\boost_1_57_0
中的命令提示符,运行:bootstrap
然后:
.\b2
按照 5.1 here 下的说明进行操作。在此之后我收到一条消息说 "The Boost C++ Libraries were successfully built!".
- 将
C:\boost_1_57_0
添加到我的路径中。说明并没有说要这样做,但由于他们要我调用 bjam,而这就是它所在的位置,我想我需要这样做。 - 修改
C:\boost_1_57_0\libs\python\example\quickstart\boost-build.jam
使路径为boost-build ../../../../tools/build/src ;
而不是boost-build ../../../../tools/build/v2 ;
。这是按照说明 here 进行的,因为原始路径是错误的,如果您不这样做,bjam 调用将失败。 CD 变成
C:\boost_1_57_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...
有什么想法吗?
我还看到了不兼容的 PDB 格式问题,但仅限于 1.57,这(因为 Boost.Python 源对于 1.57 和 1.55 是相同的,我可以让它在 1.55 上工作)我猜是某种程度上与 boost::build 路径的变化有关。
我已经 documented what I had to do 让它与 1.55 一起工作,也许这会有一些帮助。
问题仍然存在于 1.59。通过编辑文件,我设法让 Boost.Build 再次工作:
D:\boost\boost_1_59_0\tools\build\src\tools\msvc.jam
我做了两处修改:
更改此(第 1351-1355 行):
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 ] ;
删除这一行 (#1472):
toolset.flags msvc.link.dll LINKFLAGS <suppress-import-lib>true : /NOENTRY ;
我已经在 Win7 上用 VS2012 和 Python 2.7 测试过这个。
疯狂我告诉你。
无论如何,我终于在boost_1_68_0上成功构建了快速入门示例。 快速指南:
- (在 windows、visual studio 2017 和已安装 SDK,已安装 python 3.5)
- 下载解压到C:\boost_1_68_0
- 运行 bootstrap.bat
- 构建 boost-python 库:
C:\boost_1_68_0>.\b2 --with-python -j4
- 转到 C:\boost_1_68_0\libs\python\example,修复 Jamroot 以找到您的头文件
project
: requirements
<include>C:\boost_1_68_0
<library>boost_python
- 修复 tools\build\src\tools\msvc.jam 文件中 Ralph post 评论的方式
- 如 here 所述,通过在所有地方添加“#define BOOST_PYTHON_STATIC_LIB”作为第一行来修补 embedding.cpp 和 extending.cpp
- 将构建的 python-boost 库(从 C:\boost_1_68_0\stage\lib)复制到 quickstart 文件夹
- 最终构建它
C:\boost_1_68_0\libs\python\example\quickstart>..\..\..\..\b2.exe -j4
同样,这太复杂了。所有其他的东西构建得很好,但是 python 链接真的坏了。无论如何,如果有人尝试,希望这会有所帮助。