3

MinGW64 コンパイラを使用してネイティブ 64 ビット用の Boost ライブラリをビルドしようとしましたが、いくつか失敗しました。任意のポインタをいただければ幸いです。ありがとう。

bjam.exe (b2.exe) を 64 ビットでコンパイルし (警告あり)、それを使用して Boost をビルドしました。Boost.Context のビルド時に次のエラーが発生しました。(繰り返し可能なビルドのためにコマンドをバッチで書きました)。見逃したものはありますか?

  • コマンド: b2.exe install --prefix=%~dp0\bld\Boost.Build
  • エラー: 'ml64' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。

ドキュメントを読んだところ、次のように書かれていました。

Boost.Context は、対象となる特定のコンパイラと CPU アーキテクチャ用にビルドする必要があります。Boost.Context にはアセンブリ コードが含まれているため、サポートされている POSIX システムには GNU AS、Windows システムには MASM が必要です。

では、MinGW インストールに含まれている as.exe を使用するように bjam に指示することは可能ですか? (複数の MinGW を持っているため、場所は C:\MinGW\bin として標準ではありません)

project-config.jam

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

プラットホーム

  • ウィンドウズ 7 x64
  • ブースト 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%
4

5 に答える 5

3

これは、MinGW で Boost >~1.51 をビルドする場合の既知の問題です。現時点では、MinGW を使用した場合でも、Windows 用の Boost::Context をビルドするときに Boost が MASM (この場合は ml64) に依存しているため、MinGW を使用した Boost のビルドは機能しません。

おまけとして、Microsoft の Web サイトから MASM を入手できます。 64 ビット版: http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx

ここの Boost バグトラッカーで提供されているパッチを使用できます: https://svn.boost.org/trac/boost/ticket/7262ただし、Boost::Context を MinGW だけでコンパイルして、クロスコンパイルを再度有効にします。ブースト。この件に関する Boost の Olli の回答と、その件に対する彼の回答も読むことができます。少なくともしばらくの間は、Boost で何かが修正されるとは思わないでください!

于 2013-10-15T16:12:51.960 に答える
0

(これがまだ関連している場合) これは、ビルド フォルダーに msvc アーティファクトが残っている場合に発生します。あなたの project-config.jam が最初は

import option ;
using msvc ; 

msvc用にビルドしてから「using gcc」に変更した場合、最初に次を発行する必要があります

bjam --clean

これにより、msvc ビルドからアーティファクトがクリアされ、問題なく発行できるようになります。

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

ところで、あなたが Windows 7 x64 を持っていると書いているのを見ました。bjam コマンドには address-model=64 が必要です。そうしないと、32 ビットのバイナリが生成されます...

于 2013-06-03T04:16:24.883 に答える
0

Boost の要件に従って、MASM64 は Microsoft の Windows Driver Kit (WDK) に含まれています。

Microsoft Download Centerから WDK 7 をダウンロードし、インストールしたところml64.exebin\x86\amd64. 以上で、Boost 1.53.0 のコンパイルに成功しました。

于 2013-03-29T17:38:47.080 に答える