由于共享库中的错误,自定义 XGBoost 安装失败
Installation of custom XGBoost fails due to error in shared library
我正在尝试从 https://github.com/robjhyndman/M4metalearning 在 R 中设置自定义版本的 XGBoost。
当我 运行 devtools::install_github("pmontman/customxgboost")
我得到这个错误:
> devtools::install_github("pmontman/customxgboost")
Downloading GitHub repo pmontman/customxgboost@master
✔ checking for file ‘/private/var/folders/5g/1cypnkxn3fs6tbk5ylfp1rqm0000gn/T/RtmpwXcO18/remotes1ff65ae3da8c/pmontman-customxgboost-ac8dacf/DESCRIPTION’ ...
─ preparing ‘xgboost’:
✔ checking DESCRIPTION meta-information ...
─ cleaning src
✔ checking vignette meta-information ...
─ checking for LF line-endings in source and make files and shell scripts
─ checking for empty or unneeded directories
─ looking to see if a ‘data/datalist’ file should be added
─ building ‘xgboost_666.6.4.1.tar.gz’
Warning: file 'xgboost/cleanup' did not have execute permissions: corrected
* installing *source* package ‘xgboost’ ...
configure: creating ./config.status
config.status: creating src/Makevars
** libs
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c xgboost_R.cc -o xgboost_R.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c xgboost_custom.cc -o xgboost_custom.o
/usr/local/bin/gcc-8 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fPIC -Wall -g -O2 -c xgboost_assert.c -o xgboost_assert.o
/usr/local/bin/gcc-8 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fPIC -Wall -g -O2 -c init.c -o init.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c amalgamation/xgboost-all0.cc -o amalgamation/xgboost-all0.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c amalgamation/dmlc-minimum0.cc -o amalgamation/dmlc-minimum0.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c rabit/src/engine_empty.cc -o rabit/src/engine_empty.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c rabit/src/c_api.cc -o rabit/src/c_api.o
/usr/local/bin/gcc-8 -std=gnu++11 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o xgboost.so ./xgboost_R.o ./xgboost_custom.o ./xgboost_assert.o ./init.o ./amalgamation/xgboost-all0.o ./amalgamation/dmlc-minimum0.o ./rabit/src/engine_empty.o ./rabit/src/c_api.o -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs
** R
** data
** demo
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
Error: package or namespace load failed for ‘xgboost’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so, 6): Symbol not found: __ZNSt11regex_errorD1Ev
Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so
Expected in: flat namespace
in /Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so
Error: loading failed
Ejecución interrumpida
ERROR: loading failed
* removing ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost’
* restoring previous ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost’
Error in i.p(...) :
(convertido del aviso) installation of package ‘/var/folders/5g/1cypnkxn3fs6tbk5ylfp1rqm0000gn/T//RtmpwXcO18/file1ff67e4c38d5/xgboost_666.6.4.1.tar.gz’ had non-zero exit status
我正在使用
我的~/.R/Makevars文件如下:
CC=/usr/local/bin/gcc-8
CXX=/usr/local/bin/g++-8
CXX11=/usr/local/bin/gcc-8
我也尝试按照本指南安装原始 XGBoost:
https://xgboost.readthedocs.io/en/latest/build.html
一切顺利。所以问题完全出在 R 上,我有点卡住了。有什么建议吗?
我终于解决了这个问题,我将描述整个过程。
本质上你必须遵循以下步骤:
https://xgboost.readthedocs.io/en/latest/build.html
具体来说这很重要:brew install gcc@8
由于某些并行特性的性质,此命令将支持 openMP 的 gcc 版本下载到 XGBoost 的重要库。
共享库 xgboost.so
可能由于 "symbol not found error" 而失败。当您尝试 link 从不同 gcc 版本编译的对象时会发生这种情况。
更多信息在这里:
为了解决这个问题,我将 ~/.R/Makevars
文件的内容更改为:
CC=/usr/local/bin/gcc-8
CXX=/usr/local/bin/g++-8
CXX11=/usr/local/bin/g++-8
注意CX11与原题版本不同。
这解决了我的问题。
有关 Makevars
文件的更多信息:
如果上述方法失败,建议删除 R 库并重新安装,符号 link 或类似的可能有问题。
R 库(Mac Os High Sierra)存储在这里:
/Library/Frameworks/R.framework/Versions/3.5/Resources/library/
我正在尝试从 https://github.com/robjhyndman/M4metalearning 在 R 中设置自定义版本的 XGBoost。
当我 运行 devtools::install_github("pmontman/customxgboost")
我得到这个错误:
> devtools::install_github("pmontman/customxgboost")
Downloading GitHub repo pmontman/customxgboost@master
✔ checking for file ‘/private/var/folders/5g/1cypnkxn3fs6tbk5ylfp1rqm0000gn/T/RtmpwXcO18/remotes1ff65ae3da8c/pmontman-customxgboost-ac8dacf/DESCRIPTION’ ...
─ preparing ‘xgboost’:
✔ checking DESCRIPTION meta-information ...
─ cleaning src
✔ checking vignette meta-information ...
─ checking for LF line-endings in source and make files and shell scripts
─ checking for empty or unneeded directories
─ looking to see if a ‘data/datalist’ file should be added
─ building ‘xgboost_666.6.4.1.tar.gz’
Warning: file 'xgboost/cleanup' did not have execute permissions: corrected
* installing *source* package ‘xgboost’ ...
configure: creating ./config.status
config.status: creating src/Makevars
** libs
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c xgboost_R.cc -o xgboost_R.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c xgboost_custom.cc -o xgboost_custom.o
/usr/local/bin/gcc-8 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fPIC -Wall -g -O2 -c xgboost_assert.c -o xgboost_assert.o
/usr/local/bin/gcc-8 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fPIC -Wall -g -O2 -c init.c -o init.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c amalgamation/xgboost-all0.cc -o amalgamation/xgboost-all0.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c amalgamation/dmlc-minimum0.cc -o amalgamation/dmlc-minimum0.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c rabit/src/engine_empty.cc -o rabit/src/engine_empty.o
/usr/local/bin/gcc-8 -std=gnu++11 -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I./include -I./dmlc-core/include -I./rabit/include -I. -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0 -DDMLC_ENABLE_STD_THREAD=0 -DDMLC_DISABLE_STDIN=1 -DDMLC_LOG_CUSTOMIZE=1 -DXGBOOST_CUSTOMIZE_LOGGER=1 -DRABIT_CUSTOMIZE_MSG_ -DRABIT_STRICT_CXX98_ -I/usr/local/include -fopenmp -fPIC -Wall -g -O2 -c rabit/src/c_api.cc -o rabit/src/c_api.o
/usr/local/bin/gcc-8 -std=gnu++11 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o xgboost.so ./xgboost_R.o ./xgboost_custom.o ./xgboost_assert.o ./init.o ./amalgamation/xgboost-all0.o ./amalgamation/dmlc-minimum0.o ./rabit/src/engine_empty.o ./rabit/src/c_api.o -fopenmp -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
installing to /Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs
** R
** data
** demo
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
Error: package or namespace load failed for ‘xgboost’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so, 6): Symbol not found: __ZNSt11regex_errorD1Ev
Referenced from: /Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so
Expected in: flat namespace
in /Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost/libs/xgboost.so
Error: loading failed
Ejecución interrumpida
ERROR: loading failed
* removing ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost’
* restoring previous ‘/Library/Frameworks/R.framework/Versions/3.5/Resources/library/xgboost’
Error in i.p(...) :
(convertido del aviso) installation of package ‘/var/folders/5g/1cypnkxn3fs6tbk5ylfp1rqm0000gn/T//RtmpwXcO18/file1ff67e4c38d5/xgboost_666.6.4.1.tar.gz’ had non-zero exit status
我正在使用
我的~/.R/Makevars文件如下:
CC=/usr/local/bin/gcc-8
CXX=/usr/local/bin/g++-8
CXX11=/usr/local/bin/gcc-8
我也尝试按照本指南安装原始 XGBoost: https://xgboost.readthedocs.io/en/latest/build.html
一切顺利。所以问题完全出在 R 上,我有点卡住了。有什么建议吗?
我终于解决了这个问题,我将描述整个过程。
本质上你必须遵循以下步骤:
https://xgboost.readthedocs.io/en/latest/build.html
具体来说这很重要:brew install gcc@8
由于某些并行特性的性质,此命令将支持 openMP 的 gcc 版本下载到 XGBoost 的重要库。
共享库 xgboost.so
可能由于 "symbol not found error" 而失败。当您尝试 link 从不同 gcc 版本编译的对象时会发生这种情况。
更多信息在这里:
为了解决这个问题,我将 ~/.R/Makevars
文件的内容更改为:
CC=/usr/local/bin/gcc-8
CXX=/usr/local/bin/g++-8
CXX11=/usr/local/bin/g++-8
注意CX11与原题版本不同。
这解决了我的问题。
有关 Makevars
文件的更多信息:
如果上述方法失败,建议删除 R 库并重新安装,符号 link 或类似的可能有问题。
R 库(Mac Os High Sierra)存储在这里:
/Library/Frameworks/R.framework/Versions/3.5/Resources/library/