Ошибка Vowal Wabbit -Wno-unused-local-typedef в CentOS

Когда я пытаюсь установить vowpal wabbit на CentOS (образ vmware), я продолжаю получать эту ошибку:

At global scope:
cc1plus: warning: unrecognized command line option "-Wno-unused-local-typedef" [enabled by default]
make[1]: *** [lda_core.lo] Error 1
make[1]: Leaving directory `/home/tom/vowpal_wabbit/vowpalwabbit'
make: *** [install-recursive] Error 1


full error info :


Making install in vowpalwabbit
make[1]: Entering directory `/home/tom/vowpal_wabbit/vowpalwabbit'
depbase=`echo lda_core.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
    /bin/sh ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.    -I/usr/include -I/include  -Wall -Wno-unused-local-typedef    -pedantic  -ffast-math   -O3 -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG  -std=gnu++11 -MT lda_core.lo -MD -MP -MF $depbase.Tpo -c -o lda_core.lo lda_core.cc &&\
    mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I/usr/include -I/include -Wall -Wno-unused-local-typedef -pedantic -ffast-math -O3 -fomit-frame-pointer -fno-strict-aliasing -DNDEBUG -std=gnu++11 -MT lda_core.lo -MD -MP -MF .deps/lda_core.Tpo -c lda_core.cc  -fPIC -DPIC -o .libs/lda_core.o
lda_core.cc: In function ‘T ldamath::lgamma(T)’:
lda_core.cc:361:94: error: there are no arguments to ‘BOOST_STATIC_ASSERT_MSG’ that depend on a template parameter, so a declaration of ‘BOOST_STATIC_ASSERT_MSG’ must be available [-fpermissive]
   BOOST_STATIC_ASSERT_MSG(true, "ldamath::lgamma is not defined for this type and math mode.");
                                                                                              ^
lda_core.cc:361:94: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
lda_core.cc: In function ‘T ldamath::digamma(T)’:
lda_core.cc:367:95: error: there are no arguments to ‘BOOST_STATIC_ASSERT_MSG’ that depend on a template parameter, so a declaration of ‘BOOST_STATIC_ASSERT_MSG’ must be available [-fpermissive]
   BOOST_STATIC_ASSERT_MSG(true, "ldamath::digamma is not defined for this type and math mode.");
                                                                                               ^
lda_core.cc: In function ‘T ldamath::exponential(T)’:
lda_core.cc:373:99: error: there are no arguments to ‘BOOST_STATIC_ASSERT_MSG’ that depend on a template parameter, so a declaration of ‘BOOST_STATIC_ASSERT_MSG’ must be available [-fpermissive]
   BOOST_STATIC_ASSERT_MSG(true, "ldamath::exponential is not defined for this type and math mode.");
                                                                                                   ^
lda_core.cc: In function ‘T ldamath::powf(T, T)’:
lda_core.cc:379:92: error: there are no arguments to ‘BOOST_STATIC_ASSERT_MSG’ that depend on a template parameter, so a declaration of ‘BOOST_STATIC_ASSERT_MSG’ must be available [-fpermissive]
   BOOST_STATIC_ASSERT_MSG(true, "ldamath::powf is not defined for this type and math mode.");
                                                                                            ^
At global scope:
cc1plus: warning: unrecognized command line option "-Wno-unused-local-typedef" [enabled by default]
make[1]: *** [lda_core.lo] Error 1
make[1]: Leaving directory `/home/tom/vowpal_wabbit/vowpalwabbit'
make: *** [install-recursive] Error 1

Пожалуйста помоги. Как я могу это решить? У меня уже есть версия "g++ (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)".


person Zuhair Mirza    schedule 26.09.2015    source источник
comment
По опыту, создание сложного C++ с зависимостями от boost — большая проблема для Cent-OS. Гораздо более простой/разумный подход: построить статически на Ubuntu и скопировать двоичный файл. Он должен работать на любом дистрибутиве Linux. См. инструкции на github.com/JohnLangford/vowpal_wabbit/blob/master/README.md.   -  person arielf - Reinstate Monica    schedule 27.09.2015
comment
Спасибо за ваш комментарий .. на самом деле я не знаком с Ubuntu, можете ли вы поделиться ссылкой на статическую сборку в Ubuntu и скопировать двоичный файл   -  person Zuhair Mirza    schedule 29.09.2015
comment
Полные инструкции доступны в разделах Ubuntu/debian и Advanced/staticly-linked в URL-адресе: github.com/JohnLangford/vowpal_wabbit/blob/master/README.md В качестве альтернативы вы можете скачать предварительно собранные (мной) двоичные файлы с finance.yendor.com/ML/VW/Binaries HTH   -  person arielf - Reinstate Monica    schedule 30.09.2015


Ответы (2)


Это проблема связывания между файлами, пожалуйста, выполните следующие команды

Тестовый прогон

# yum install devtoolset-2-gcc-4.8.2 devtoolset-2-gcc-c++-4.8.2
# /opt/rh/devtoolset-2/root/usr/bin/gcc --version

экспорт

ln -s /opt/rh/devtoolset-2/root/usr/bin/* /usr/local/bin/
hash -r
gcc --version

для получения дополнительной информации: http://www.computerhope.com/unix/uln.htm

person Zuhair Mirza    schedule 29.09.2015

Это то, что я делаю в CentOs 6.8 перед запуском pip install vowpalwabbit как для conda, так и для основного дистрибутива python, который создает нативную часть и яйцо python. Содержит закомментированные строки для случая сборки образа докера. Почти уверен, что то же самое должно помочь с созданием библиотеки vowpal-wabbit.

Исходная проблема с BOOST_STATIC_ASSERT_MSG решается установкой boost-devel:1.59.

yum -y install wget make python-devel zlib-devel

# Boost 1.59 required for vowpal wabbit, Boost 1.41 is going with CentOs 6.8 image and repo
wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo
yum -y install boost-devel

# This step is done for the original author, but will be needed if you didn't install updated gcc/g++ yet.
# GCC and G++ 4.8.2 for vowpal wabbit build, 4.4.x is going with CentOs 6.8 image by default.
# Don't go with too new gcc versions like gcc 5.x, it will not work 
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum -y install devtoolset-2-gcc devtoolset-2-gcc-c++ devtoolset-2-binutils devtoolset-2-runtime devtoolset-2-libstdc++-devel

scl enable devtoolset-2 bash
# Set PATH, because "scl enable" does not have any effects inside "docker build"
#-docker- PATH /opt/rh/devtoolset-2/root/usr/bin:$PATH
# Set CC, CXX, LD variables for make, because "scl enable" does not have any effects inside "docker build"
#-docker- ENV CC /opt/rh/devtoolset-2/root/usr/bin/gcc
#-docker- ENV CXX /opt/rh/devtoolset-2/root/usr/bin/g++
#-docker- ENV LD /opt/rh/devtoolset-2/root/usr/bin/ld

# Python 2.7 for vowpal wabbit, CentOs 6.8 comes with python 2.6
# --enable-shared flag is important for the vowpal wabbit build
cd /opt &&\
  wget --no-check-certificate https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz &&\
  tar xf Python-2.7.6.tar.xz &&\
  cd Python-2.7.6 &&\
  ./configure --enable-shared --prefix=/usr/local &&\
  make && make altinstall

ln -s /usr/local/bin/python2.7 /usr/bin/python2.7
echo "/usr/local/lib/python2.7" > /etc/ld.so.conf.d/python27.conf
echo "/usr/local/lib" >> /etc/ld.so.conf.d/python27.conf
ldconfig

После этого шаги pip install vowpalwabbit или make для оригинальной нативной библиотеки должны работать.

Соответствующее обсуждение в системе отслеживания проблем vowpal-wabbit.

person Dmitry Spikhalskiy    schedule 30.11.2017