Boost.Python 快速入门链接器错误
Boost.Python Quickstart Linker Errors
我只是尝试按照此处的说明进行操作以使快速入门示例正常工作。我使用的是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 中的说明进行操作。在此之后,我收到一条消息,说"Boost C++库已成功构建!
- 为我的路径添加
C:boost_1_57_0
。说明没有说要这样做,但是由于他们希望我调用bjam,这就是它所在的位置,因此我认为我需要这样做。 - 修改
C:boost_1_57_0libspythonexamplequickstartboost-build.jam
,使路径boost-build ../../../../tools/build/src ;
而不是boost-build ../../../../tools/build/v2 ;
。这是按照此处的说明进行的,因为原始路径是错误的,如果您不这样做,bjam 调用将失败。 -
CD 进入
C:boost_1_57_0libspythonexamplequickstart
并运行:bjam toolset=msvc --verbose-test test
我得到的输出首先是:
...patience...
...patience...
...found 1926 targets...
...updating 55 targets...
common.mkdir bin
common.mkdir bintest_ext.test
common.mkdir bintest_ext.testmsvc-12.0
common.mkdir bintest_ext.testmsvc-12.0debug
common.mkdir bintest_ext.testmsvc-12.0debugthreading-multi
common.mkdir binmsvc-12.0
common.mkdir binmsvc-12.0debug
common.mkdir binmsvc-12.0debugthreading-multi
compile-c-c++ binmsvc-12.0debugthreading-multiextending.obj
extending.cpp
c:python27includepymath.h(22) : warning C4273: 'round' : inconsistent dll linkage
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDEmath.h(516) : see previous definition of 'round'
C:Program Files (x86)Microsoft Visual Studio 12.0VCINCLUDExtgmath.h(190) : warning C4273: '_hypot' : inconsistent dll linkage
后面是一长串其他头文件条目,每个条目都抱怨 DLL 链接不一致,最后是一堆错误,其中突出显示包括:
LINK : fatal error LNK1207: incompatible PDB format in 'C:boost_1_57_0libspythonexamplequickstartbinmsvc-12.0debugthreading-multiextending.pdb'; delete and rebuild
...failed msvc.link.dll binmsvc-12.0debugthreading-multiextending.pyd binmsvc-12.0debugthreading-multiextending.pdb...
...removing binmsvc-12.0debugthreading-multiextending.pdb
LINK : warning LNK4001: no object files specified; libraries used
LINK : error LNK2001: unresolved external symbol _mainCRTStartup
bintest_embed.testmsvc-12.0debugthreading-multitest_embed.exe : fatal error LNK1120: 1 unresolved externals
...failed msvc.link bintest_embed.testmsvc-12.0debugthreading-multitest_embed.exe bintest_embed.testmsvc-12.0debugthreading-multitest_embed.pdb...
...removing bintest_embed.testmsvc-12.0debugthreading-multitest_embed.pdb
...skipped <pbintest_embed.testmsvc-12.0debugthreading-multi>test_embed.run for lack of <pbintest_embed.testmsvc-12.0debugthreading-multi>test_embed.exe...
...failed updating 4 targets...
有什么想法吗?
1.59 仍然存在问题。我设法通过编辑文件让 Boost.Build 再次工作:
D:boostboost_1_59_0toolsbuildsrctoolsmsvc.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对此进行了测试。
我也看到了不兼容的 PDB 格式问题,但仅限于 1.57,其中(因为 Boost.Python 源代码对于 1.57 和 1.55 是相同的,我可以让它在 1.55 上工作)我猜与 boost::build 路径的变化有关。
我已经记录了我必须做什么才能让它与 1.55 一起工作,也许这会有所帮助。
我告诉你的疯狂。
无论如何,我终于成功地在boost_1_68_0上构建了快速入门示例。快速指南:
- (在Windows上,安装了Visual Studio 2017和SDK,安装了python 3.5)
- 下载并解压缩它,如 C:\boost_1_68_0
- 运行引导程序.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 在这篇文章中评论 的那样
- 如此处所述,补丁嵌入.cpp和扩展.cpp通过在任何地方添加"#define BOOST_PYTHON_STATIC_LIB"作为第一行
- 将构建的 python-boost 库(从 C:\boost_1_68_0\stage\lib)复制到快速入门文件夹
- 终于建造它
C:\boost_1_68_0\libs\python\example\quickstart>..\..\..\..\b2.exe -j4
同样,这是疯狂的复杂。所有其他东西都构建得很好,但 python 链接确实被破坏了。无论如何,如果有人尝试,希望这有帮助。
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误