2016-08-06 6 views
8

Я хотел бы создать HTTP-библиотеки Facebook с проксигенным C++ из github с Ubuntu 16.04. Вот среда я настраивал вместе с deps.sh команды для установки зависимостей:Build Proxygen под Ubuntu 16.04

gcc --version 
    gcc (Ubuntu 5.4.0-6ubuntu1~16.04.1) 5.4.0 20160609 
export CPPFLAGS="-std=c++14" 
export CXXFLAGS="-std=c++14" 
git clone [email protected]:facebook/proxygen.git 
cd proxygen/proxygen && ./deps.sh 

Это меня большую часть пути через строит свою глупость зависимость, но я получаю неполную ошибку типа:

libtool: compile: g++ -DHAVE_CONFIG_H -I./.. -pthread -I/usr/include -std=c++14 -std=gnu++1y -std=c++14 -MT io/async/AsyncPipe.lo -MD -MP -MF io/async/.deps/AsyncPipe.Tpo -c io/async/AsyncPipe.cpp -fPIC -DPIC -o io/async/.libs/AsyncPipe.o 
In file included from /usr/include/c++/5/bits/move.h:57:0, 
       from /usr/include/c++/5/bits/stl_pair.h:59, 
       from /usr/include/c++/5/utility:70, 
       from /usr/include/c++/5/algorithm:60, 
       from ./../folly/Conv.h:26, 
       from Conv.cpp:16: 
/usr/include/c++/5/type_traits: In instantiation of ‘struct std::make_unsigned<__int128>’: 
Conv.cpp:528:52: required from ‘folly::detail::ConversionResult<T> folly::detail::digits_to(const char*, const char*) [with Tgt = __int128]’ 
Conv.cpp:658:16: required from here 
/usr/include/c++/5/type_traits:1757:62: error: invalid use of incomplete type ‘class std::__make_unsigned_selector<__int128, false, false>’ 
    { typedef typename __make_unsigned_selector<_Tp>::__type type; }; 
                  ^
/usr/include/c++/5/type_traits:1721:11: note: declaration of ‘class std::__make_unsigned_selector<__int128, false, false>’ 
    class __make_unsigned_selector; 
     ^
/usr/include/c++/5/type_traits: In instantiation of ‘struct std::make_unsigned<__int128 unsigned>’: 
Conv.cpp:528:52: required from ‘folly::detail::ConversionResult<T> folly::detail::digits_to(const char*, const char*) [with Tgt = __int128 unsigned]’ 
Conv.cpp:661:16: required from here 

Кто-нибудь это пробовал? Я еще не знаком с базой кода. Тиа.

+0

FYI ускоренная версия, наносимая Ubuntu 16.04, составляет 1.58.0. – moodboom

+1

Ваши параметры компилятора теперь выглядят как «-std = C++ 14 -std = gnu ++ 1y -std = C++ 14». При попытке компиляции кода, как это: #include INT основной() { \t авто а = станд :: make_unsigned <__int128>(); } вы не справитесь, из-за возможности компиляции. Просто удалите CPPFLAGS, CXXFLAGS. – vadikrobot

+0

Спасибо @vadikrobot. У меня не было набора [gnu ++ 1y], поэтому я пытался C++ 14. – moodboom

ответ

8

TL; DR Для проксигена необходимы расширения GNU; использовать -std=gnu++11 или -std=gnu++14


Почему вы должны переопределить C++ стандарт при создании proxygen и его зависимости? Сама глупость указывает -std=gnu++1y. Если удалить

export CPPFLAGS="-std=c++14" 
export CXXFLAGS="-std=c++14" 

и попытаться построить его, он почти будет, единственное изменение, которое я должен был сделать, чтобы глупостью является fix membarrier.

Если вы настаиваете на использовании -std=c++14, то проблема на самом деле не в безумии, это в libstdC++ обработка расширений GNU, эта простая линия:

typedef std::make_unsigned<__int128>::type int128_type; 

легко компилировать с -std=gnu++11 или -std=gnu++1y, но не получится с любым из -std=c++11 или -std=c++14. И сложно сказать, является ли это ошибкой (поскольку компилятор предоставляет тип __int128 (и глупость обнаруживает, что в его скрипте configure, BTW), но у библиотеки C++ есть проблемы с ним) или с функцией (потому что __int128 является расширением в первом место, и для его правильного использования следует использовать некоторый вариант стандарта GNU).

+0

Это именно то, что я искал, вы спасли мне время работы назад, чтобы обнаружить расширение GNU. Оцените патч за глупость. – moodboom

+1

Теперь, чтобы на самом деле скомпилировать ... без CPPFLAGS, используя gcc 5.4.0, я получаю «проверку, поддерживает ли g ++ возможности C++ 1y с -std = gnu ++ 1y ... no - configure: error: Не удалось найти cxx1y поддержка в g ++ ". Я добавил поддержку gnu ++ 14, и мы уходим. – moodboom

+0

Конечный результат: построенный без ошибок, все тесты прошли. Спасибо, Роман. FYI Мне не нужен фолиант. – moodboom