2012-12-21 25 views
3

我试图使用MinGW64编译器为本机64位构建Boost库,但出现了一些故障。任何指针赞赏。谢谢。使用MinGW64构建Boost而不使用MASM

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

  • 命令:b2.exe安装前缀=%〜DP0 \ BLD \ Boost.Build
  • 错误:ml64'不被识别为一个内部或外部的命令,可操作的程序或批处理文件。

我阅读文档,它说:

Boost.Context必须为特定的编译器(S)和CPU架构(S)内置S为目标。 Boost.Context包含汇编代码,因此需要支持POSIX系统的GNU AS和Windows系统的MASM。

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

项目config.jam中

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

平台

  • 的Windows 7 x64
  • Boost 1.52.0(source from sourceforge)
  • MinGW 4.7.2(ruben VB 64)在我的机器
  • 没有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% 
+0

http://nuwen.net/mingw.html – TemplateRex

回答

0

根据Boost's requirements,您可以在Microsoft的Windows驱动程序工具包(WDK)中找到MASM64。

我从Microsoft Download Center下载了WDK 7,安装后我发现ml64.exebin\x86\amd64。这样,我就能够成功编译Boost 1.53.0。

+0

我下载了WDK,但安装该工具时出现问题,它只是抛出错误并终止未完成。所以我必须坚持使用MinGW工具链 –

+0

@ YamHon.CHAN它对我来说真的很顺利。也许你可以用你遇到的问题开启另一个问题。 – betabandido

+0

感谢您的建议,我会为这个问题提出一个新问题,但是目前我必须坚持使用MinGW工具链 –

0

(如果这仍然相关)当您的构建文件夹中存在msvc工件时,会发生这种情况。我假设你的项目配置。果酱最初

import option ; 
using msvc ; 

,你已经建立了MSVC则改为“使用gcc”在这种情况下,你需要执行下面的第一

bjam --clean 

应清除文物从MSVC生成并你可以发出和事情应该很好

bjam toolset=gcc variant=..... and so on and on 

顺便说一句,我看到你写你有Windows 7 x64。你的bjam命令需要有地址模型= 64否则会产生32位二进制文​​件...

3

这是一个已知的问题,用MinGW构建Boost>〜1.51。目前,使用MinGW构建Boost失败了,因为当为Windows构建Boost :: Context时,即使使用MinGW,Boost也依赖于MASM(在你的情况下为ml64)。

作为bodge你可以从微软网站获得MASM:http://www.microsoft.com/en-gb/download/details.aspx?id=12654的32位版本,否则驱动程序开发工具包的64位版本:http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx

您可以使用所提供的补丁在这里提升bug跟踪器:https://svn.boost.org/trac/boost/ticket/7262尽管只是使用MinGW进行Boost :: Context编译,因此重新启用了Boost的交叉编译。你也可以阅读Boost的Olli对这个问题的回应以及他对这个问题的回应。不要期望至少有一段时间内Boost会有什么修复!

+0

我首先尝试了这个补丁,并不适合我。安装Windows驱动程序工具包并将ml64.exe放入我的%PATH%之后,构建Boost :: Context成为可能。 –

0

有点晚了,也许,但我设法编译升压模块(Git仓库,所以应该类似​​于1.55为2014年7月的)在Windows 7上使用MinGW和WDK的7

的步骤我使用了

  1. 安装MinGW和MSYS(庆典等)使用的MinGW-GET-设置(最简单的方式),加斌/于路径
  2. 安装驱动程序开发工具包(用于W7我用WDK 7) - - GRMWDK_EN_7600_1.ISO
    下载ISO映像并使用WinRAR解压缩文件为我工作
    安装建议不要安装DSF,所以跳过
  3. ML64.exe和ML.EXE的目录添加到路径(要求两者据我所知)
    C:\ WINDOWS \ WINDDK \ 7600.16385.1 \ BIN \ X86 \ AMD64; C:\ WINDOWS \ WINDDK \ 7600.16385.1 \ BIN \ X86
  4. 开放的cmd.exe作为管理员,并开始bash的
  5. 升压的父目录,运行
    混帐克隆--recursive https://github.com/boostorg/boost.git提升> clone.log
  6. exit bash,goto directory boost and run:bootstrap gcc
  7. 如果完成没有问题(如果发现ML64.exe),运行
    b2 -a -d + 2 -q --build-type = complete --build-dir = build toolset = gcc link = shared运行时链接=共享线程=多

没有明确地将ML(64)目录添加到路径,我仍然有关于ML的错误。

安装MASM与安装MSVC不同。我试着先使用不同的汇编器,但是boost与输出不兼容。

+0

只是为了补充:我在很大程度上能够在1y后重新执行这些步骤,重新发现** 1 **路径中步骤1的bin目录用于64位mingw编译器** 2 **之后运行“bootstrap gcc”你需要改变'project-config.jam':而不是'使用msvc;'它应该在运行最后的'b2'行之前读取'使用gcc;'** 3 **,你需要运行'b2 headers'来设置一些符号链接 - 否则在最后一步中将找不到一些文件 –

+0

实际上它不会将这些选项编译为'b2'。没有选项(例如,没有动态链接,没有多线程),'b2'完成成功;带有对'__imp_ make_fcontext'的未定义引用和'__imp_jump_fcontext'的未定义引用退出的选项 - 不知道如何解决这个问题... –

2

在这里发布这个答案是为了Google的好处,因为我一直在努力解决这个问题,最终找到了解决方案。

如果使用MASM 6构建,Boost上下文将无法在MinGW下进行链接,因为它会生成EXPORT符号。

即使库链接正确,它也会显示为undefined reference to `make_fcontext'

对得到的库的Objdump给出make_i386_ms_pe_masm.o: File format not recognized

的解决方案是,确保你使用MASM 8

您可以在http://www.microsoft.com/en-us/download/confirmation.aspx?id=12654下载 - 安装程序会挨骂的,需要先安装VC,但是你可以通过提取绕过这个安装程序的内容使用WinRAR等工具;提取setup.exe并再次提取以获取.cab文件,并第三次提取并将生成的二进制文件重命名为ml.exe。

然后用bjam --toolset=gcc --with-context -a stage重建Boost。

希望有人用Google搜索相同的术语我一直在Google上搜索会发现这有帮助。