2012-12-21 22 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上搜索會發現這有幫助。