2016-08-06 15 views
8

Chciałbym zbudować Facebookowe biblioteki Proxygen C++ http z github z Ubuntu 16.04. Oto środowisko założyłem wraz z deps.sh polecenie, aby zainstalować zależności:Buduj Proxygen pod 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 

To got me większość drogi poprzez budowanie jego zależność głupoty, ale jestem coraz niekompletną typu błędu:

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 

Czy ktoś próbował lub rozwiązał to? Nie znam jeszcze podstawy kodu. Tia.

+0

FYI wersja doładowania wciągnięta przez Ubuntu 16.04 to 1.58.0. – moodboom

+1

Opcje kompilatora teraz wyglądają jak "-std = C++ 14 -std = gnu ++ 1y -std = C++ 14". Jeśli spróbujesz skompilować kodu: #include int main() { \t auto a = std :: make_unsigned <__int128>(); } Ci się nie uda, z powodu opcji kompilacji. Po prostu usuń CPPFLAGS, CXXFLAGS. – vadikrobot

+0

Dzięki @vadikrobot. Nie ustawiłem [gnu ++ 1y], dlatego próbowałem C++ 14. – moodboom

Odpowiedz

8

TL; DR Proxygen potrzebuje rozszerzeń GNU; używać -std=gnu++11 lub -std=gnu++14


Dlaczego trzeba zastąpić standardu C++ przy budowie proxygen i jego zależności? Folly sam określa -std=gnu++1y. Jeśli usuniesz

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

i starają się go zbudować, to prawie będzie jedyną zmianą, że muszę zrobić, aby głupota jest fix membarrier.

Jeśli nalegać na użyciu -std=c++14, to problem faktycznie nie jest szaleństwem, to w libstdC++ obsługa rozszerzeń GNU, ta prosta linia:

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

łatwo skompilować z -std=gnu++11 lub -std=gnu++1y, ale nie powiedzie się z dowolnym z -std=c++11 lub -std=c++14. I trudno powiedzieć, czy jest to błąd (ponieważ kompilator zapewnia typ __int128 (i głupota wykrywa to w swoim skrypcie konfiguracyjnym, BTW), ale biblioteka C++ ma z tym problemy) lub funkcję (ponieważ __int128 jest rozszerzeniem w pierwszym miejsce i należy użyć jakiegoś wariantu standardu GNU, aby poprawnie go uzyskać).

+0

Dokładnie tego szukałem, zaoszczędziłeś mi czasu pracy wstecz, aby odkryć rozszerzenie GNU. Doceń też łatę za głupotę. – moodboom

+1

Teraz, aby skompilować ... bez CPPFLAGS, używając gcc 5.4.0, otrzymuję "sprawdzanie, czy g ++ obsługuje funkcje C++ 1y z -std = gnu ++ 1y ... no - configure: error: Nie można znaleźć cxx1y wsparcie w g ++ ". Dodałem obsługę gnu ++ 14 i odeszliśmy. – moodboom

+0

Wynik końcowy: zbudowany bez błędów, wszystkie testy zakończone. Dzięki, Roman. FYI Nie potrzebowałem tej głupiej łaty. – moodboom

Powiązane problemy