Windows 编译 Boost.Python 库失败的解决方案

问题现象

  • 在Windows下编译Boost.Python失败:
    • 提示 ''::hypot' has not been declared'
    • 提示 libpython27.a: error adding symbols: File format not recognizedlibpython36.a: error adding symbols: File format not recognized

机器环境

环境 版本
Windows Win10 1709
Boost 1.65.1
Mingw 6.3
Python 3.6.3

问题分析与解决方案

”::hypot’ has not been declared’

产生原因

  • 由于头文件定义在Windows下水土不服,导致使用MinGW在Windows下编译Boost.Python时,找不到相关声明

解决方案

  • 在编译Boost库时加上参数cxxflags="-D_hypot=hypot"
  • 即完整的编译命令为b2 ... cxxflags="-D_hypot=hypot"

libpython36.a: error adding symbols: File format not recognized

产生原因

  • Windows下Python发行版自带的链接库是为msvc编译的,并不是为gcc编译的,所以gcc无法识别,需要重新编译此库

解决方案

  • 安装gendef
    • 命令行执行mingw-get install gendef(可能需要连接国外网络)
  • 安装Python
    • 目前经过测试3.6.3可以经过此方法解决问题,其他版本应该同理
  • 备份链接库
    • 备份path_to_python/libs/下的文件,并删除
  • 重新编译链接库
    • 命令行执行
cd path_to_python
gendef python36.dll
dlltool -D python36.dll -d python36.def -l libs/libpython36.a
  • 重新编译Boost.Python
    • b2 ... cxxflags="-D_hypot=hypot"

你可能感兴趣的:(Boost,windows,boost,mingw,python)