Сборка Proxygen под Ubuntu 16.04

Я хотел бы собрать библиотеки Facebook Proxygen c ++ http из github с Ubuntu 16.04. Вот среда, которую я настроил вместе с командой deps.sh для установки зависимостей:

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

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

8

Решение

TL; DR Proxygen нужны расширения GNU; использование -std=gnu++11 или же -std=gnu++14


Зачем вам нужно переопределять стандарт C ++ при сборке proxygen и его зависимостей? Фолли сама указывает -std=gnu++1y, Если вы удалите

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

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

Если вы настаиваете на использовании -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 Тип (и глупо обнаруживает, что в своем скрипте конфигурации, BTW), но с библиотекой C ++ есть проблемы с ним) или функция (потому что __int128 это расширение в первую очередь, и для правильного его получения нужно использовать вариант стандарта GNU).

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]