2014-09-02 4 views
0

Я пытаюсь скомпилировать пример кода, который я загрузил для веб-сервера (https://github.com/eidheim/Simple-Web-Server), с gcc-4.9, и я получаю сообщение об ошибке постановляю:gcc-4.8 (и 4.9) не распознает -std = C++ 11 параметр

src$ make 
Makefile:45: http_examples.d: No such file or directory 
/usr/bin/gcc-4.9 -MM http_examples.cpp -MT "http_examples.o http_examples.d" -MF http_examples.d 
In file included from /usr/include/c++/4.9/regex:35:0, 
       from server_http.hpp:6, 
       from http_examples.cpp:1: 
/usr/include/c++/4.9/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. 
#error This file requires compiler and library support for the \ 

^

Я попробовал оба варианта компилятора и ни один не исправляет эту проблему. Вот соответствующие биты из файла make:

PROJECT = ToolBoxServer 
# Compiler 
CC = /usr/bin/gcc-4.9 

# Run Options  
COMMANDLINE_OPTIONS = /dev/ttyS0 

# Compiler options during compilation 
COMPILE_OPTIONS = -std=c++11 -pedantic -Wall -Wno-long-long -ggdb3 -gstabs -O0 -pthreads 

#Header include directories 
HEADERS = -I/usr/local/include -I./ -I/usr/local/include/boost 
#Libraries for linking 
LIBS = -lm -lmysqlcppconn 
# Dependency options 
DEPENDENCY_OPTIONS = -MM 

# Compile every cpp file to an object 
%.o: %.cpp 
     $(CC) -c $(COMPILE_OPTIONS) -o [email protected] $< $(HEADERS) 

Я использовал gcc-4.8. Я прочитал, что gcc 4.9 имеет (лучше) поддержку регулярного выражения и его установку, но я получаю ту же ошибку.

С кем это столкнулось? Насколько мне известно, gcc-4.9 - это самый компилятор C++ 11-like. Может кто-нибудь предложить способ исправить это?

Благодаря

Mike

+12

'-std = C++ 11' для C++, поэтому вы должны использовать' g ++ ', а не' gcc'. – juanchopanza

+1

Это не причина его ошибки. Это может привести к ошибкам ссылок, но 'gcc' поддерживает параметр' -std = C++ 11' и будет компилировать его код как C++ из-за расширения '.cpp'. –

+0

Это не проблема gcc/g ++. Это проблема с Makefile. –

ответ

2

Вы не включили все соответствующие биты из вашего Makefile. Причем вы не включили правило из Makefile, который выглядит примерно так:

%.d: %.cpp 
    $(CC) -MM $< -MT "$(@:.d=.o) [email protected]" -MF [email protected] 

Вы получите ошибку, потому что это правило не использовать те же параметры компиляции, которые используются при вызове GCC обычно. Если вы добавите $(COMPILE_OPTIONS) к этому правилу, вы больше не должны получать ошибку.