Xgboost: Gagal saat membangun xgboost menggunakan 64-bit mingw g++

Dibuat pada 27 Mar 2016  ·  35Komentar  ·  Sumber: dmlc/xgboost

Saya ingin mengkompilasi xgboost untuk Anaconda Python 3.x di 64-bit Windows 10, jadi saya mengikuti langkah-langkah di sini - https://xgboost.readthedocs.org/en/latest/build.html#building -on-windows dan di sini - Instal xgboost di bawah python dengan 64-bit msys gagal. Menggunakan 64-bit mingw g++, saya mendapat pesan kesalahan berikut ketika "make -j4" menggunakan mingw64.mk:

g++: error: dmlc-core/libdmlc.a: Tidak ada file atau direktori seperti itu
g++: error: rabit/lib/librabit_empty.a: Tidak ada file atau direktori seperti itu
Makefile:120 : resep untuk target 'lib/libxgboost.dll' gagal
mingw32-make: *** [lib/libxgboost.dll] Kesalahan 1

Rincian lebih lanjut dari pesan log dapat ditemukan di sini:
log.txt

Bisakah Anda memberi tahu saya apa yang terjadi dan bagaimana saya bisa menyelesaikannya?

Terima kasih banyak.

Komentar yang paling membantu

Semua 35 komentar

Anda dapat menyalin mingw32-make.exe ke direktori git (mis. C:\Program Files\Git\usr\bin), dan ganti namanya menjadi make.exe. Kemudian jalankan kembali make -j4 di git shell.

Anda perlu membangun dmlc-core dan rabit secara langsung

cd dmlc-inti
buat -j4

cd ../rabit
buat -j4

tetapi yang ini gagal dalam instalasi saya, mencoba memahami mengapa.

Oke, saya menemukannya.

Menggunakan mingw64, Anda harus memiliki mingw32-make di jalur Anda. Alias ​​​​untuk membuatnya seperti yang dijelaskan dalam panduan instalasi.
Anda kemudian pergi ke direktori xgboost dan lakukan hal berikut:
cd dmlc-inti
buat -j4
cd ../rabit
buat lib/librabit_empty -j4
cd ..
cp make/mingw64.mk config.mk
buat -j4

salah ketik:
di komentar sebelumnya, satu baris harus dibaca
buat lib/librabit_empty.a -j4
dari pada
buat lib/librabit_empty -j4

Terima kasih banyak jfpuget!! Akhirnya berhasil dengan langkah Anda di atas!

@jfpuget Mungkin Anda dapat membantu meningkatkan instruksi kami. Setiap PR akan benar-benar diterima.

@jfpuget Ini terlihat bagus, dapatkah Anda membuat PR untuk meningkatkan instruksi lama. Terima kasih!

Tentu, akan dilakukan ASAP (beberapa hari karena saya baru saja kembali dari liburan dan orang-orang memikirkan saya di tempat kerja;))

Halo semua. Ketika 'make -j4' di direktori root, saya mengalami masalah ini. Apakah Anda memiliki beberapa saran? Terima kasih

Subdirektori atau pembuatan file sudah ada.
Terjadi kesalahan saat memproses: build.
Makefile:97 : resep untuk target 'build/logging.o' gagal
make: ** [build/logging.o] Kesalahan 1make: * * Menunggu pekerjaan yang belum selesai....
Sintaks perintahnya salah.
Makefile:97 : resep untuk target 'build/common/common.o' gagal
make: ** [build/common/common.o] Kesalahan 1Sintaks perintahnya salah.Makefile:97 : resep untuk target 'build/c_api/c_api_error.o' gagalbuat: * * [build/c_api/c_api_error.o] Kesalahan 1

Saya mengerti ... Saya menggunakan git cmd .. bukan git bash ... Itu sebabnya saya mengalami masalah.

Saya juga dapat membagikan catatan saya tentang bagaimana saya membangun paket xgboost R dan python di bawah windows.

Beberapa solusi saya mirip dengan Jean-François', tetapi ada beberapa perbedaan halus karena saya menggunakan mingw build toolchain yang dibundel dengan Rtools. Pada dasarnya, windows berantakan dengan berbagai macam bundel berbasis mingw di luar sana saat ini dengan berbagai tingkat kelengkapan, stabilitas dan up-to-date. Bahkan dalam situasi saya yang saya jelaskan di bawah ini ada tiga perangkat berbasis mingw yang harus bekerja sama:

  • seperangkat alat gnu baris perintah tanpa kompiler minimal dengan windows git;
  • kompilator gcc-4.7 tetapi tidak dibuat dengan Anaconda;
  • dan satu set yang cukup berguna yang memiliki gcc-4.6.3 dan membuatnya datang dengan Rtools.

Yang terakhir ini cukup untuk kebutuhan C++ 11 dari xgboost, dan sejauh ini saya tidak melihat alasan untuk melibatkan distribusi mingw lain ke dalam kekacauan ini. Dalam situasi seperti itu, sangat penting untuk sangat berhati-hati tentang apa yang masuk ke PATH dan dalam urutan apa.

Beberapa catatan tentang Rtools:

Saya menggunakan bundel Rtools terbaru versi 3.3. Namun (PENTING), selama instalasi Rtools, saya tidak menginstal 3.3 toolchain dengan gcc 4.9 - masih ada beberapa masalah. Toolchain 3.2 64-bit sudah cukup dan berfungsi dengan baik. Karena saya lebih sering menggunakan R, saya menambahkan jalur Rtools ke PATH sistem saya, tetapi bukan jalur Miniconda. Setiap kali saya membutuhkan python saat tidak menggunakan pintasan Anaconda, saya hanya mengatur jalur yang diperlukan secara manual.

Pembuatan paket R cukup sepele:
  • git sumbernya
  • luncurkan R
setwd('wherever xgboost R-package directory is')
install.packages('.', repos = NULL, type='source')
setwd('tests')
source('testthat.R')
Membangun exe & perpustakaan xgboost membutuhkan beberapa solusi:
  • dengan asumsi git-bash, dalam direktori root xgboost
  • pastikan which gcc menunjuk ke /c/Rtools/gcc-4.6.3/bin/gcc (tergantung di mana Rtools dipasang)
  • edit rabit/Makefile dan tambahkan flag -m64 ke baris definisi CFLAGS (bukankah seharusnya itu ada di tempat pertama?): export CFLAGS = -m64 -O3 -msse2 $(WARNFLAGS)
  • berikut ini akan berfungsi sekarang (perlu menjalankan make dalam beberapa tahap di sini karena beberapa interaksi/keanehan/bug mingw bundle):
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
Paket 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

Anda benar: jika Anda sudah memiliki kompiler g++ yang berfungsi, maka Anda tidak perlu menginstal yang lain lagi.

dengan https://github.com/dmlc/xgboost/pull/1071 , segalanya akan lebih mudah

BTW, saya telah mengirimkan #1071 yang memungkinkan untuk menjalankan mingw32-make.exe -j dari root proyek untuk mengkompilasi semuanya sekaligus, saat menggunakan distribusi Mingw baru-baru ini. Make in Rtools masih membutuhkan solusi...

@jfpuget Saya ingin tahu: apakah Anda punya alasan khusus untuk memilih utas POSIX dan opsi penanganan pengecualian SEH? Misalnya, saya baru saja mencoba menginstal Win32 dan SJLJ (hanya karena itu yang digunakan gcc di Rtools) dan sepertinya berhasil.

Pengamatan menarik pada gcc 5.3: tampaknya menghasilkan kode 64 bit yang datang tidak peduli apakah ada flag -m64 yang disetel untuk perpustakaan rabit atau tidak. Itu sebabnya Anda tidak mengalami kesalahan saat menautkannya. Apakah gcc beralih ke -m64 sebagai default di beberapa versi?

Tentang modifikasi PATH dalam python: jika Anda baru saja memodifikasi PATH sistem, terkadang Python dari anaconda di windows (tergantung bagaimana Anda memulainya?) hanya akan mengambilnya setelah reboot/login ulang. Saya tidak memeriksanya sekarang, tetapi saya memiliki beberapa masalah serupa beberapa waktu lalu.

@khotilov Saya baru saja meninggalkan pengaturan default di penginstal mingw64-gw.

Memodifikasi jalur sistem tidak cukup baik, bahkan jika saya me-reboot python (sebenarnya, saya me-restart kernel dari dalam notebook). Saya akan memeriksa lagi mengapa saya perlu memodifikasi variabel path os di dalam Python.

Tujuan saya adalah menjalankan dan menjalankan xgboost, oleh karena itu saya berhenti menyelidiki ketika saya selesai.

@khotilov Saya tidak yakin MinGW-w64 mana dengan GCC 5.3 yang Anda gunakan.

Tetapi di beberapa distribusi (mungkin sebagian besar), tidak ada dukungan multiarch.

Di xgboost\dmlc-core\include\dmlc\base.h
baris 113

jika (didefinisikan mingw32 ) || (didefinisikan mingw64 )

//#mendefinisikan fopen64 std::fopen

berakhir jika

jika Anda menggunakan MINGW64, Anda harus mengomentari definisi fopen64 ini karena
mingw64 telah mendefinisikan fopen64 sendiri di stdio.h

@yunzhou Terima kasih. Setelah bermain-main sepanjang malam, trik Anda benar-benar berhasil.

Sebenarnya kesalahan saya memang mengatakan sesuatu yang salah dengan 'base.h'.

@jfpuget : Saya mencoba menginstal menggunakan tautan Anda tetapi saya mendapatkan kesalahan berikut
Makefile:136 : resep untuk target 'xgboost' gagal

Saya yakin saya melakukan semuanya sesuai artikel Anda. Bisakah kamu menolongku? Terima kasih

Hai,

tidak ada cara Anda bisa mendapatkan bantuan kecuali Anda memberikan informasi lebih lanjut. Apa kesalahan saat membangun? Apa yang Anda berikan bukanlah pesan kesalahan, itu adalah ringkasannya.

Silakan kirim log build tanpa pengeditan apa pun.

Hormat kami/Hormat kami,JFJean-Francois Puget, PhDInsinyur Terhormat, Pembelajaran Mesin dan Pengoptimalan, IBM AnalyticsMobile: +33(0)6 7000 8815 Email: jf. [email protected] : http://bit.ly/jfpuget Twitter: @JFPuget


----- Pesan asli -----Dari: harishneela [email protected] : dmlc/xgboost [email protected] : Jean Francois Puget/France/ IBM@IBMFR , Sebutkan [email protected] : Re: [dmlc/xgboost] Gagal saat membangun xgboost menggunakan 64-bit mingw g++ (#1049)Tanggal: Rab, 2 Nov 2016 19:51
@jfpuget : Saya mencoba menginstal menggunakan tautan Anda tetapi saya mendapatkan kesalahan berikut
Saya yakin saya melakukan semuanya sesuai artikel Anda. Bisakah kamu menolongku? Terima kasih
—Anda menerima ini karena Anda disebutkan. Balas email ini secara langsung, lihat di GitHub, atau matikan utas.

Sauf indikasi contrare ci-dessus:/ Kecuali dinyatakan lain di atas:
Perusahaan IBM Prancis
Pengepungan Sosial : 17 avenue de l'Europe, 92275 Bois-Colombes Cedex
RCS Nanterre 552 118 465
Bentuk Sosial : SAS
Modal Sosial : 657.364.587 €
SIREN/SIRET : 552 118 465 03644 - Kode NAF 6202A

Mac menginstal xgboost

1. Tingkatkan minuman

Karena minuman belum diperbarui setelah memutakhirkan Mac ke 10.12, saya menemukan beberapa lubang saat memperbarui minuman, dan sekarang saya akan menganalisisnya. Jangan gunakan pembaruan brew secara langsung untuk memperbarui brew, itu akan melaporkan kesalahan. Gunakan brew upgrade untuk memperbarui perangkat lunak, dan brew akan diperbarui secara aktif saat memperbarui perangkat lunak lain.

2. Instal gcc versi terbaru (gcc-6)

brew install gcc --tanpa-multilib

Catatan: Jika Anda memutakhirkan brew, Anda tidak dapat menginstal gcc.

3. Unduh kode sumber dari Git

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

Setelah mengunduh, cd xgboost; cp make/minimum.mk ./config.mk; make -j4 untuk mengkompilasi xgboost. Sejauh ini, itu baru saja dikompilasi xgboost. (coba beberapa kali lagi, mungkin lain kali akan berhasil)

4. Instal xgboost versi python

Karena xgboost terbagi menjadi versi Python dan versi bahasa R. Karena kemacetan kinerja R, saya menggunakan python, jadi instal xgboost versi python.

Masuk ke direktori xgboost, lalu masuk ke direktori python-package xgboost, gunakan perintah: cd python-package/

Jalankan di direktori python-package: sudo python setup.py install, jika sudo tidak ditambahkan, kesalahan akan dilaporkan:

5. Selesai, saya pasang sendiri, semoga bermanfaat untuk orang lain

@jfpuget hanya ingin tahu apakah Anda mengetahui bahwa instruksi ini valid pada mesin POWER8. Saya mencoba membangun XGBoost di POWER8 dan centos 7. Saya mendapatkan kesalahan yang sama dengan OP.

Saya tidak tahu.

Halo @jfpuget

Terimakasih untuk blog Anda. Namun saya memerlukan beberapa panduan untuk menyelesaikan instalasi. Saya mendapatkan kesalahan setelah saya mengetik "python setup.py install"

Dikatakan "tidak dapat menemukan perpustakaan xgboost di jalur kandidat". Apakah ini berarti saya memiliki kesalahan dalam instalasi sebelum titik ini. Saya tidak mendapatkan kesalahan apa pun ketika saya mengikuti langkah-langkahnya.

Salam Hormat

Saya mengikuti instruksi jfpuget untuk membuat submodul, lalu ini adalah kesalahan setelah pembuatan terakhir,

dmlc-core/libdmlc.a: kesalahan menambahkan simbol: Arsip tidak memiliki indeks; jalankan ranlib untuk menambahkan satu
collect2.exe: kesalahan: ld mengembalikan 1 status keluar
Makefile: 174 : resep untuk target 'xgboost' gagal
buat: * [xgboost] Kesalahan 1

Ada yang punya ide?

Terima kasih!

@jfpuget Saya mencoba mengikuti instruksi Anda di OS windows saya beberapa kali, tetapi saya mendapatkan kesalahan ini setiap kali:
$ cd dmlc-core
$ mingw32-make -j4
g++ -c -O3 -Dinding -Wno-unknown-pragmas -Termasuk -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 -Dinding -Wno-unknown-pragmas -Termasuk -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 -Dinding -Wno-unknown-pragmas -Termasuk -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 -Dinding -Wno-unknown-pragmas -Termasuk -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 -Dinding -Wno-unknown-pragmas -Termasuk -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
Dalam file yang disertakan dari include/dmlc/./././parameter.h:25:0,
dari include/dmlc/././registry.h:14,
dari include/dmlc/./data.h:16,
dari include/dmlc/threadediter.h:20,
dari src/io/cached_input_split.h:16,
dari src/io.cc:13:
include/dmlc/././././optional.h: Dalam instantiasi 'dmlc::opsional::~opsional() [dengan T = int]':
include/dmlc/./././parameter.h:513:7: diperlukan dari sini
include/dmlc/././././optional.h:60:7: warning: dereferencing type-punned pointer akan melanggar aturan aliasing ketat [-Wstrict-aliasing]
reinterpret_cast(&val)->~T();
^ ~ ~ ~
include/dmlc/././././optional.h: Dalam instantiasi 'const T& dmlc::opsional::nilai() const [dengan T = int]':
include/dmlc/./././parameter.h:872:9: diperlukan dari sini
include/dmlc/././././optional.h:106:12: warning: dereferencing type-punned pointer akan melanggar aturan aliasing ketat [-Wstrict-aliasing]
kembali reinterpret_cast(&val);^ ~ ~ ~ ~ ~ ~ ~ ~~g++ -c -O3 -Dinding -Wno-unknown-pragmas -Termasuk -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: Dalam instantiasi 'const T& dmlc::opsional::operator () const [dengan T = int]':
include/dmlc/././././optional.h:134:11: diperlukan dari 'std::ostream& dmlc::operator<<(std::ostream&, const dmlc::opsional&) [dengan T = int; std::ostream = std::basic_ostream]'
include/dmlc/./././parameter.h:877:13: diperlukan dari sini
include/dmlc/././././optional.h:97:12: warning: dereferencing type-punned pointer akan melanggar aturan aliasing ketat [-Wstrict-aliasing]
kembali reinterpret_cast(&val);^ ~ ~ ~ ~ ~ ~ ~ ~~g++ -c -O3 -Dinding -Wno-unknown-pragmas -Termasuk -std=c++0x -fPIC -DDMLC_USE_HDFS=0 -DDMLC_USE_S3=0 -DDMLC_USE_AZURE=0 -msse2 -o recordio.o src/recordio.ccDalam file yang disertakan dari src/data/././text_parser.h:11:0,dari src/data/./libsvm_parser.h:13,dari src/data/disk_row_iter.h:19,dari src/data.cc:12:include/dmlc/omp.h:15:81: catatan: #pragma pesan: Peringatan: OpenMP tidak tersedia, proyek akan dikompilasi menjadi kode utas tunggal.






::~opsional() [dengan T = int]':include/dmlc/././parameter.h:513:7: diperlukan dari siniinclude/dmlc/./././optional.h:60:7: warning: dereferencing type-punned pointer akan melanggar aturan aliasing ketat [-Wstrict-aliasing]reinterpret_cast(&val)->~T();^ ~ ~ ~include/dmlc/./././optional.h: Dalam instantiasi 'const T& dmlc::opsional::nilai() const [dengan T = int]':include/dmlc/././parameter.h:872:9: diperlukan dari siniinclude/dmlc/./././optional.h:106:12: warning: dereferencing type-punned pointer akan melanggar aturan aliasing ketat [-Wstrict-aliasing]kembali *reinterpretasi_cast(&val);^ ~ ~ ~ ~ ~ ~ ~ ~~include/dmlc/./././optional.h: Dalam instantiasi 'const T& dmlc::opsional::operator
() const [dengan T = int]':
include/dmlc/./././optional.h:134:11: diperlukan dari 'std::ostream& dmlc::operator<<(std::ostream&, const dmlc::opsional&) [dengan T = int; std::ostream = std::basic_ostream]'
include/dmlc/././parameter.h:877:13: diperlukan dari sini
include/dmlc/./././optional.h:97:12: warning: dereferencing type-punned pointer akan melanggar aturan aliasing ketat [-Wstrict-aliasing]
kembali *reinterpretasi_cast(&val);
^ ~ ~ ~ ~ ~ ~ ~ ~~
g++ -c -O3 -Wall -Wno-unknown-pragmas -Termasuk -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

Anda mengkompilasi dengan g++, bukan mingw.

@jfpuget
Berdasarkan resep Anda yang tersedia di https://www.ibm.com/developerworks/community/blogs/jfp/entry/Installing_XGBoost_For_Anaconda_on_Windows?lang=en , saya melakukan langkah-langkah berikut:

1) Saya menginstal Git untuk windows.
2) Saya meluncurkan Git Bash dari menu mulai
3) Saya mengubah direktori menjadi /c/Users/Roshan/code
4) Saya menjalankan perintah:
$ git clone --recursive https://github.com/dmlc/xgboost
$cd xgboost
$ git submodul init
$git pembaruan submodul

5) Saya mengunduh MinGW-W64 dari url yang disebutkan di posting Anda
6) Saya memeriksa dan menemukan mingw32-make di "C:\Program Files\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin"
7) Saya menambahkan "C:\Program Files\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev0\mingw64\bin" ke variabel sistem jalur saya
8) Saya menjalankan perintah "yang mingw32-make" yang mengembalikan "/c/Program Files/mingw-w64/x86_64-7.1.0-posix-seh-rt_v5-rev0/mingw64/bin/mingw32-make"
9) Saya menjalankan perintah: alias make='mingw32-make'
10) Saya mengubah direktori menjadi "/c/Users/Roshan/code/xgboost/dmlc-core"
11) Kemudian, saya menjalankan perintah: make -j4

Bagaimana saya akhirnya mengkompilasi dengan g++ alih-alih mingw. Saya mengikuti setiap instruksi Anda, Yang Mahakuasa. Mengapa saya masih terbakar di neraka?

@jfpuget Saya membersihkan semuanya dan mencoba semua langkah ini lagi. Kali ini, saya menginstal mingw di drive C (sebagai salah satu situs web yang merekomendasikan untuk menghindari Program Files, karena folder ini memiliki spasi di namanya). Saat menginstal, saya juga memilih versi 5.3.0 (bukan default 7 sesuatu). Tapi itu juga tidak membantu.

@qingdatascience : Apa yang secara khusus Anda lakukan untuk membuatnya bekerja?

Saya tidak ingat. Sepertinya hanya mengedit file skrip bash seperti yang disarankan @yunzhou . Jika tidak berhasil untuk Anda, saya sarankan Anda untuk mencoba LightGBM, yang berasal dari MS dan lebih cepat.

Terima kasih banyak untuk @datascienceqing dan juga @jfpuget

Karena saya tidak dapat menginstal xgboost, saya menginstal LightGBM. Saya mengikuti instruksi yang diberikan di URL berikut. Seluruh instalasi (mulai sampai selesai) memakan waktu kurang dari 30 menit:
https://github.com/Microsoft/LightGBM/tree/master/python-package

Saya memiliki OS windows. Saya tidak memiliki Visual Studio. Saya dapat menginstal LightGBM dalam 5 langkah:
1) Unduh dan instal cmake dari https://cmake.org/download/
2) Unduh dan instal MS Build dari https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017
3) Unduh dan instal Git dari https://git-for-windows.github.io/?cm_mc_uid=41805252005114998995219&cm_mc_sid_502000000=1500774547
4) Mulai Git Bash
5) Jalankan perintah ini:
git clone --recursive https://github.com/Microsoft/LightGBM
cd LightGBM/paket python
python setup.py instal

Saya akhirnya bisa menginstal xgboost, setelah beberapa putaran trial and error. Petunjuk di lokasi berikut sangat membantu: http://www.picnet.com.au/blogs/guido/post/2016/09/22/xgboost-windows-x64-binary-for-download/

Terima kasih kepada @gatapia @jfpuget dan @qingdatascience

Apakah halaman ini membantu?
0 / 5 - 0 peringkat