windows - 在没有 MASK 的情况下使用 MinGW W64 构建 Boost

标签 windows boost mingw masm

我尝试使用 MinGW64 编译器为 native 64 位构建 Boost 库,但遇到了一些失败。任何指针表示赞赏。谢谢。

我得到了以 64 位编译的 bjam.exe (b2.exe)(有警告),我用它来构建 Boost。构建 Boost.Context 时出现以下错误。 (我批量编写了可重复构建的命令)。我错过了什么吗?

  • 命令:b2.exe install --prefix=%~dp0\bld\Boost.Build
  • 错误:“ml64”不是内部或外部命令、可运行程序或批处理文件。

我阅读了文档,它说:

Boost.Context 必须针对特定的编译器和 objective-c PU 架构构建。 Boost.Context 包含汇编代码,因此需要 GNU AS 支持 POSIX 系统,MASM 支持 Windows 系统。

那么,是否可以告诉 bjam 使用我的 MinGW 安装中包含的 as.exe? (因为我有多个MinGW,位置不是标准的C:\MinGW\bin)

项目配置.jam

import option ;
using gcc ; 
option.set keep-going : false ; 

平台

  • Windows 7 x64
  • Boost 1.52.0(来自 sourceforge)
  • MinGW 4.7.2 (rubenvb x64)
  • 没有安装 MSVC(我的机器上没有安装/发现 ml64.exe)
  • 编辑 安装WDK时出现的问题

构建BJam时的警告,我觉得可以忽略

function.c: In function 'check_alignment':
function.c:222:5: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

整批

SET OPATH=%PATH%
SET BOOST_VER=boost_1_52_0
SET "PATH_ZIP=C:\Program Files\7-zip"
SET "PATH_MINGW=C:\MinGW\rubenvb-4.7.2-64"
SET "PATH_SRC=%~dp0\%BOOST_VER%"
SET "PATH_BJAM=%PATH_SRC%\tools\build\v2\engine"

TITLE Extracting Packages ...
IF NOT EXIST "%PATH_SRC%.7z" GOTO :err_nozip
RD /S /Q "%PATH_SRC%"
"%PATH_ZIP%"\7z x "%PATH_SRC%.7z"

TITLE Building BJam ...
PUSHD "%PATH_BJAM%"
SET "PATH=%PATH_MINGW%\bin"
SET "BOOST_JAM_TOOLSET_ROOT=%PATH_MINGW%\"
CALL build.bat mingw --show-locate-target
SET PATH=%OPATH%
COPY "bin.ntx86_64\b2.exe" "%PATH_SRC%\" > nul
COPY "bin.ntx86_64\bjam.exe" "%PATH_SRC%\" > nul
POPD

TITLE Installing Boost Build...
PUSHD "%PATH_SRC%"
ECHO import option ; > project-config.jam
ECHO. >> project-config.jam
ECHO using gcc ; >> project-config.jam
ECHO. >> project-config.jam
ECHO option.set keep-going : false ; >> project-config.jam
ECHO. >> project-config.jam
b2.exe install --prefix=%~dp0\bld\Boost.Build
POPD

SET PATH=%OPATH%

最佳答案

这是使用 MinGW 构建 Boost >~1.51 的已知问题。目前,使用 MinGW 构建 Boost 已被破坏,因为在为 Windows 构建 Boost::Context 时,Boost 依赖于 MASM(在您的情况下为 ml64),即使使用 MinGW。

您可以从 Microsoft 网站获取 MASM:http://www.microsoft.com/en-gb/download/details.aspx?id=12654对于 32 位版本,或者对于 64 位版本的 Windows 驱动程序工具包:http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx

您可以在此处使用 Boost 错误跟踪器上提供的补丁:https://svn.boost.org/trac/boost/ticket/7262尽管使 Boost::Context 仅使用 MinGW 进行编译,从而重新启用 Boost 的交叉编译。您还可以阅读 Boost 的 Olli 对该主题的回复以及他对该主题的回复。至少暂时不要指望 Boost 会修复任何问题!

关于windows - 在没有 MASK 的情况下使用 MinGW W64 构建 Boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13987018/

相关文章:

windows - 如何在 Windows 中检测何时连接了新硬件?

javascript - 创建快捷方式,打开网站并在 x 毫秒后重新加载

c++ - 序列化所需的公共(public)空构造函数

C++ - Boost : Getting same random number . 播种似乎不起作用

c++ - MinGW 上支持 OpenMP 的 Qt 插件 : Undefined reference?

windows - 提取文件的一部分并存储在批处理文件中的变量中

php - 如何使用 PHP 和 ffmpeg 在后台转换视频

c++ - partial_sort 和智能指针

windows-7 - 帮助在 Win7-64 上通过 mingw32 或 mingw-64 安装 ECL (Embeddable Common Lisp)

c++ - 如何调试 C++ 运行时错误