Xgboost: 64ビットのmingwg ++を使用してxgboostをビルドすると失敗する

作成日 2016年03月27日  ·  35コメント  ·  ソース: dmlc/xgboost

私はここの手順に従って、私は、64ビットのWindows 10でアナコンダのPython 3.xのためxgboostコンパイルしたい- https://xgboost.readthedocs.org/en/latest/build.html#building -on-窓やここ-64ビットのmsysが失敗したPythonの下にxgboostをインストールします。 64ビットのmingwg ++を使用すると、mingw64.mkを使用して「make-j4」を実行すると次のエラーメッセージが表示されます。

g ++:エラー:dmlc-core / libdmlc.a:そのようなファイルまたはディレクトリはありません
g ++:エラー:rabit / lib / librabit_empty.a:そのようなファイルまたはディレクトリはありません
Makefile:120 :ターゲット 'lib /libxgboost.dll'のレシピが失敗しました
mingw32-make:*** [lib /libxgboost.dll]エラー1

ログメッセージの詳細については、次を参照してください。
log.txt

何が起こっているのか、どうすれば解決できるのか教えていただけますか?

どうもありがとう。

最も参考になるコメント

ここに完全な手順を記述しました: https

全てのコメント35件

mingw32-make.exeをgitディレクトリ(例:C:\ Program Files \ Git \ usr \ bin)にコピーし、名前をmake.exeに変更してから、gitシェルでmake-j4を再実行します。

dmlc-coreとrabitを直接ビルドする必要があります

cddmlc-コア
make -j4

cd ../rabit
make -j4

しかし、これは私のインストールで失敗し、理由を理解しようとしています。

OK、見つけました。

mingw64を使用するには、パスにmingw32-makeを含める必要があります。 インストールガイドで説明されているように、エイリアスを作成して作成します。
次に、xgboostディレクトリに移動し、次の手順を実行します
cddmlc-コア
make -j4
cd ../rabit
lib / librabit_empty-j4を作成します
CD ..
cp make / mingw64.mk config.mk
make -j4

打ち間違え:
前のコメントでは、1行は次のようになります
lib / librabit_empty.a-j4を作成します
それ以外の
lib / librabit_empty-j4を作成します

どうもありがとうjfpuget !! それは最終的に上記の手順で機能します!

ここに完全な手順を記述しました: https

@jfpugetたぶんあなたは私たちの指示を改善するのを手伝うことができます。 どんなPRでも大歓迎です。

@jfpugetこれは素晴らしく見えます、古い命令を改善するためにPRを作成できますか。 ありがとう!

確かに、できるだけ早くやります(私は休暇から戻ったばかりで、人々は仕事で私のことを考えているので、数日;))

こんにちは、みんな。 ルートディレクトリで「make-j4」を実行すると、この問題が発生します。 アドバイスはありますか? どうも

サブディレクトリまたはファイルビルドはすでに存在します。
処理中にエラーが発生しました:ビルド。
Makefile:97 :ターゲット 'build /logging.o'のレシピが失敗しました
make: ** [build /logging.o]エラー1make:**未完成の仕事を待っています...。
コマンドの構文が正しくありません。
Makefile:97 :ターゲット 'build / common /common.o'のレシピが失敗しました
make: ** [build / common /common.o]エラー1コマンドの構文が正しくありません。Makefile:97 :ターゲット 'build / c_api /c_api_error.o'のレシピが失敗しましたmake:* * [build / c_api /c_api_error.o]エラー1

私はそれを手に入れました...私はgitcmdを使用していました..gitbashではありません...それが私が問題に遭遇した理由です。

また、WindowsでxgboostRおよびpythonパッケージを構築する方法についてのメモを共有することもできます。

私の回避策のいくつかはJean-Françoisに似ていましたが、Rtoolsにバンドルされているmingwビルドツールチェーンを使用しているため、微妙な違いがいくつかあります。 基本的に、Windowsは、さまざまな程度の完全性、安定性、および最新性を備えた、多種多様なmingwベースのバンドルが散らかっています。 以下で説明する私の状況でも、連携する必要のある3つのmingwベースのツールセットがあります。

  • Windowsgitを備えた最小限のコンパイラなしのコマンドラインgnuツールセット。
  • gcc-4.7コンパイラですが、Anacondaでのmakeセットはありません。
  • そして、gcc-4.6.3とmakeがRtoolsに付属しているかなり使いやすいセットです。

後者はxgboostのC ++ 11のニーズには十分であり、この混乱にさらに別のmingwディストリビューションを含める理由は今のところわかりません。 このような状況では、PATHに何が入り、どのような順序で入るのかについて非常に注意することが重要です。

Rtoolsに関するいくつかのメモ:

最新のRtoolsバンドルバージョン3.3を使用しています。 ただし、(重要)、Rtoolsのインストール中に、gcc4.9で3.3ツールチェーンをインストールしません。まだいくつかの問題があります。 3.2 64ビットツールチェーンで十分であり、正常に動作します。 Rをもっと使用するので、システムPATHにRtoolsのパスを追加しましたが、Minicondaのパスは追加していません。 Anacondaのショートカットを使用せずにPythonが必要な場合は、必要なパスを手動で設定するだけです。

Rパッケージのビルドはかなり簡単です。
  • ソースをgit
  • Rを起動
setwd('wherever xgboost R-package directory is')
install.packages('.', repos = NULL, type='source')
setwd('tests')
source('testthat.R')
xgboost exeとライブラリを構築するには、いくつかの回避策が必要です。
  • xgboostルートディレクトリ内でgit-bashを想定
  • which gcc/c/Rtools/gcc-4.6.3/bin/gcc指していることを確認してください(Rtoolsがインストールされている場所によって異なります)
  • rabit/Makefileを編集し、 -m64フラグをCFLAGS定義行に追加します(そもそもそこにあるべきではありませんか?): export CFLAGS = -m64 -O3 -msse2 $(WARNFLAGS)
  • 以下は今動作するはずです(いくつかのmingwバンドルの相互作用/癖/バグのためにここで複数の段階でmakeを実行する必要があります):
cp make/mingw64.mk config.mk
cp make/mingw64.mk dmlc-core/config.mk
cd rabit
make lib/librabit_empty.a -j4
cd ../dmlc-core
make -j4
cd ..
make -j4
Pythonパッケージ:
export PATH=/c/Miniconda/Scripts:/c/Miniconda:/C/Miniconda/MinGW/bin:$PATH
cd python-package/
python setup.py install
python tests/python/test_basic_models.py

その通りです。すでに動作しているg ++コンパイラがある場合は、さらに別のコンパイラをインストールする必要はありません。

https://github.com/dmlc/xgboost/pull/1071を使用すると、物事が簡単になるはずです

ところで、私は#1071を提出しました。これにより、最近のMingwディストリビューションを使用するときに、プロジェクトルートからmingw32-make.exe -jして、すべてを一度にコンパイルできます。 Rtoolsのmakeはまだ回避策が必要です...

@jfpuget興味があります:POSIXスレッドとSEH例外処理オプションを選択する特別な理由はありましたか? たとえば、Win32とSJLJをインストールしようとしましたが(Rtoolsのgccが使用していたため)、それは機能しているようです。

gcc 5.3に関する興味深い観察結果:ラビットライブラリに-m64フラグが設定されているかどうかに関係なく、来た64ビットコードが生成されるようです。 そのため、リンク中にエラーは発生しませんでした。 gccは、あるバージョンでデフォルトとして-m64に切り替えましたか?

python内のPATHの変更時:システムPATHを変更したばかりの場合、WindowsのanacondaからのPythonは、再起動/再ログイン後にのみそれを取得することがあります(起動方法によって異なりますか?)。 今はチェックしていませんが、少し前に似たような問題がありました。

@ khotilovmingw64-gwインストーラーのデフォルト設定をそのままにしました。

Pythonを再起動した場合でも、システムパスを変更するだけでは不十分でした(実際には、ノートブック内からカーネルを再起動しました)。 Python内でosパス変数を変更する必要がある理由をもう一度確認します。

私の目標はxgboostを稼働させることだったので、終わったら調査をやめました。

@khotilov使用しているGCC5.3のMinGW-w64が

しかし、一部のディストリビューション(おそらくほとんど)では、マルチアーチサポートはありません。

xgboost \ dmlc-core \ include \ dmlc \ base.hにあります
113行目

if(定義済みMINGW32 )|| (定義されたMINGW64

//#define fopen64 std :: fopen

endif

MINGW64を使用している場合は、このfopen64定義にコメントする必要があります。
mingw64はstdio.hで独自のfopen64を定義しています

@yunzhouありがとうございます。 一晩中ぐちゃぐちゃにした後、あなたのトリックは本当に仕事をしました。

実際、私のエラーは「base.h」に何か問題があることを示していました。

@jfpuget :リンクを使用してインストールしようとしましたが、次のエラーが発生します
Makefile:136 :ターゲット 'xgboost'のレシピが失敗しました

私はあなたの記事に従ってすべてをしたと確信しています。 手伝ってくれませんか? ありがとう

こんにちは、

あなたがより多くの情報を提供しない限り、あなたが助けを得ることができる方法はありません。 ビルド中のエラーは何ですか? あなたが提供するのはエラーメッセージではなく、要約です。

編集せずにビルドのログを送信してください。

よろしくお願いいたします。JFJean-FrancoisPuget、PhDDistinguished Engineer、Machine Learning and Optimization、IBM AnalyticsMobile:+33(0)6 7000 8815 Email:jf。 [email protected]http ://bit.ly/jfpuget Twitter:@JFPuget


harishneela:から-----元のメッセージ----- [email protected] :DMLC / xgboost [email protected] :ジャン・フランソワ・ピュージェット/フランス/ IBMFR @ IBM 、言及[email protected] :Re:[dmlc / xgboost] 64ビットのmingwg ++を使用してxgboostをビルドすると失敗する(#1049)日付:2016年11月2日水曜日19:51
@jfpuget :リンクを使用してインストールしようとしましたが、次のエラーが発生します
私はあなたの記事に従ってすべてをしたと確信しています。 手伝ってくれませんか? ありがとう
-言及されたため、これを受け取っています。このメールに直接返信するか、GitHubで表示するか、スレッドをミュートしてください。

Sauf表示contraireci-dessus:/上記で特に明記されていない限り:
Compagnie IBM France
SiègeSocial:17 avenue de l'Europe、92275 Bois-Colombes Cedex
RCSナンテール552118465
Forme Sociale:SAS
キャピタルソーシャル:657.364.587€
SIREN / SIRET:552 118 46503644-コードNAF6202A

Macはxgboostをインストールします

1.醸造をアップグレードします

Macを10.12にアップグレードした後、brewが更新されていないため、brewを更新するときにいくつかのピットが見つかりました。次に、それを分析します。 brewupdateを直接使用してbrewを更新しないでください。エラーが報告されます。 brew upgradeを使用してソフトウェアを更新すると、他のソフトウェアを更新している間、brewはアクティブに更新されます。

2.最新バージョンのgcc(gcc-6)をインストールします

brew install gcc --without-multilib

注:brewをアップグレードする場合、gccをインストールすることはできません。

3.Gitからソースコードをダウンロードします

Git clone --recursive https://github.com/dmlc/xgboost

ダウンロード後、cd xgboost; cp make / minimum.mk ./config.mk; make -j4を実行して、xgboostをコンパイルします。これまでのところ、xgboostをコンパイルしただけです。 (もう数回試してみてください。次回は成功するかもしれません)

4.Pythonバージョンのxgboostをインストールします

xgboostはPythonバージョンとR言語バージョンに分かれているからです。 Rのパフォーマンスのボトルネックのため、私はpythonを使用しているので、xgboostのpythonバージョンをインストールします。

xgboostディレクトリに入り、次にxgboostのpython-packageディレクトリに入り、次のコマンドを使用します:cd python-package /

python-packageディレクトリで実行します:sudo python setup.py install、sudoが追加されていない場合、エラーが報告されます:

5.終了しました。自分でインストールしました。他の人にも役立つことを願っています。

@jfpugetは、これらの命令がPOWER8マシンで有効であることを知っているかどうかを知りたいだけです。 POWER8とcentos7でXGBoostをビルドしようとしています。OPと同じエラーが発生します。

わからない。

こんにちは@jfpuget

ブログありがとうございます。 ただし、インストールを完了するには、いくつかのガイダンスが必要です。 「pythonsetup.pyinstall」と入力するとエラーが発生します

「候補パスにxgboostライブラリが見つかりません」と表示されます。 これは、この時点より前にインストールでエラーが発生したことを意味しますか? 手順を実行してもエラーは発生しませんでした。

敬具

jfpugetの指示に従ってサブモジュールを作成しましたが、最後の作成後のエラーは次のとおりです。

dmlc-core / libdmlc.a:シンボルの追加エラー:アーカイブにインデックスがありません。 ranlibを実行して1つ追加します
collect2.exe:エラー:ldが1つの終了ステータスを返しました
Makefile:174 :ターゲット 'xgboost'のレシピが失敗しました
make: * [xgboost]エラー1

誰かアイデアがありますか?

ありがとう!

@jfpuget Windows OSであなたの指示に数回
$ cddmlc-コア
$ mingw32-make -j4
g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o line_split.o src / io / line_split.cc
g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o recordio_split.o src / io / recordio_split.cc
g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o input_split_base.o src / io / input_split_base.cc
g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o io.o src / io.cc
g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o local_filesys.o src / io / local_filesys.cc
include / dmlc /./././ parameter.h:25:0からインクルードされたファイル内、
include / dmlc /././ registry.h:14から、
include / dmlc /./ data.h:16から、
include / dmlc / threadediter.h:20から、
src / io / cached_input_split.h:16から、
src / io.cc:13から:
include / dmlc /././././ optional.h: 'dmlc :: optionalのインスタンス化:: 〜optional()[with T = int] ':
include / dmlc /./././ parameter.h:513:7:ここから必要
include / dmlc /././././ optional.h:60:7:警告:型のパンニングされたポインターを間接参照すると、厳密なエイリアシングルールが破られます[-Wstrict-aliasing]
reinterpret_cast(&val)-> 〜T();
^ ~~~
include / dmlc /././././ optional.h: 'const T&dmlc :: optionalのインスタンス化:: value()const [with T = int] ':
include / dmlc /./././ parameter.h:872:9:ここから必要
include / dmlc /././././ optional.h:106:12:警告:型のパンニングされたポインターを間接参照すると、厳密なエイリアシングルールが破られます[-Wstrict-aliasing]
reinterpret_castを返す(&val);^ ~~~~~~ ~~g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o data.o src / data.ccinclude / dmlc /././././ optional.h: 'const T&dmlc :: optionalのインスタンス化::オペレーター ()const [with T = int] ':
include / dmlc /././././ optional.h:134:11: 'std :: ostream&dmlc :: operator <<(std :: ostream&、const dmlc :: optionalから必要&)[with T = int; std :: ostream = std :: basic_ostream] '
include / dmlc /./././ parameter.h:877:13:ここから必要
include / dmlc /././././ optional.h:97:12:警告:型のパンニングされたポインターを間接参照すると、厳密なエイリアシングルールが破られます[-Wstrict-aliasing]
reinterpret_castを返す(&val);^ ~~~~~~ ~~g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o recordio.o src / recordio.ccsrc / data /././ text_parser.h:11:0からインクルードされたファイルでは、src / data /./ libsvm_parser.h:13から、src / data / disk_row_iter.h:19から、src / data.cc:12から:include / dmlc / omp.h:15:81:注:#pragmaメッセージ:警告:OpenMPは使用できません。プロジェクトはシングルスレッドコードにコンパイルされます。






:: 〜optional()[with T = int] ':include / dmlc /././ parameter.h:513:7:ここから必要include / dmlc /./././optional.h:60:7:警告:型のパンニングされたポインターを間接参照すると、厳密なエイリアシングルールが破られます[-Wstrict-aliasing]reinterpret_cast(&val)-> 〜T();^ ~~~include / dmlc /./././optional.h:'const T&dmlc :: optionalのインスタンス化:: value()const [with T = int] ':include / dmlc /././ parameter.h:872:9:ここから必要include / dmlc /./././optional.h:106:12:警告:型のパンニングされたポインターを間接参照すると、厳密なエイリアシングルールが破られます[-Wstrict-aliasing]* reinterpret_castを返します(&val);^ ~~~~~~ ~~include / dmlc /./././optional.h:'const T&dmlc :: optionalのインスタンス化::オペレーター
()const [with T = int] ':
include / dmlc /./././optional.h:134:11:'std :: ostream&dmlc :: operator <<(std :: ostream&、const dmlc :: optionalから必要&)[with T = int; std :: ostream = std :: basic_ostream] '
include / dmlc /././ parameter.h:877:13:ここから必要
include / dmlc /./././optional.h:97:12:警告:型のパンニングされたポインターを間接参照すると、厳密なエイリアシングルールが破られます[-Wstrict-aliasing]
* reinterpret_castを返します(&val);
^ ~~~~~~ ~~
g ++ -c -O3 -Wall -Wno-unknown-pragmas -Iinclude -std = c ++ 0x -fPIC -DDMLC_USE_HDFS = 0 -DDMLC_USE_S3 = 0 -DDMLC_USE_AZURE = 0 -msse2 -o config.o src / config.cc
ar cr libdmlc.a line_split.o recordio_split.o input_split_base.o io.o local_filesys.o data.o recordio.o config.o

mingwではなくg ++でコンパイルしています。

@jfpuget
https://www.ibm.com/developerworks/community/blogs/jfp/entry/Installing_XGBoost_For_Anaconda_on_Windows?lang=enで入手できる処方箋に基づいて、次の手順を実行しました。

1)Git forWindowsをインストールしました。
2)スタートメニューからGitBashを起動しました
3)ディレクトリを/ c / Users / Roshan / codeに変更しました
4)コマンドを実行しました:
$ git clone --recursive https://github.com/dmlc/xgboost
$ cd xgboost
$ gitサブモジュールinit
$ gitサブモジュールの更新

5)あなたの投稿に記載されているURLからMinGW-W64をダウンロードしました
6)「C:\ ProgramFiles \ mingw-w64 \ x86_64-7.1.0-posix-seh-rt_v5-rev0 \ mingw64 \ bin」でmingw32-makeを確認して見つけました
7)パスシステム変数に「C:\ ProgramFiles \ mingw-w64 \ x86_64-7.1.0-posix-seh-rt_v5-rev0 \ mingw64 \ bin」を追加しました
8)「/ c / ProgramFiles / mingw-w64 / x86_64-7.1.0-posix-seh-rt_v5-rev0 / mingw64 / bin / mingw32-make」を返すコマンド「whichmingw32-make」を実行しました
9)次のコマンドを実行しました:alias make = 'mingw32-make'
10)ディレクトリを「/ c / Users / Roshan / code / xgboost / dmlc-core」に変更しました
11)次に、次のコマンドを実行しました:make -j4

どうしてmingwではなくg ++でコンパイルすることになったのですか。 全能で、私はあなたの指示のそれぞれに従いました。 なぜ私はまだ地獄で燃えているのですか?

@jfpugetすべてをクリーンアップし、これらすべての手順を再試行しました。 今回は、mingwをCドライブにインストールしました(このフォルダーの名前にスペースが含まれているため、Webサイトの1つがプログラムファイルを避けることを推奨しているため)。 インストール中に、バージョンを5.3.0として選択しました(デフォルトの7ではなく)。 しかし、それも役に立ちませんでした。

@qingdatascience :それを機能させるために具体的に何をしましたか?

覚えていませんでした。 @yunzhouが提案したようにbashスクリプトファイルを編集しているように見えます。 それがうまくいかなかった場合は、MS以降のLightGBMを試してみることをお勧めします。

@datascienceqingます

xgboostをインストールできなかったので、LightGBMをインストールしました。 次のURLに記載されている手順に従いました。 インストール全体(開始から終了まで)は30分未満で完了しました。
https://github.com/Microsoft/LightGBM/tree/master/python-package

私はWindowsOSを持っています。 VisualStudioを持っていません。 私は5つのステップでLightGBMをインストールすることができました:
1)https://cmake.org/download/からcmakeをダウンロードしてインストールします
2)https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017からMSBuildをダウンロードしてインストールします
3)https://git-for-windows.github.io/?cm_mc_uid=41805252005114998995219&cm_mc_sid_50200000=1500774547からGitをダウンロードしてインストールします
4)GitBashを開始します
5)次のコマンドを実行します。
git clone --recursive https://github.com/Microsoft/LightGBM
cd LightGBM / python-package
python setup.py install

何度か試行錯誤した後、ようやくxgboostをインストールできました。 次の場所の手順は非常に役に立ちました: http

@ gatapia @ jfpuget@qingdatascienceに感謝し

このページは役に立ちましたか?
0 / 5 - 0 評価