LINUX.ORG.RU

Хочу c++11 в gcc - не работает

 , , ,


0

2

Всем привет!

Хочу скомпильнуть сей неказистый код:

#include <iostream>

using namespace std;

int main( )
{
    int count = 10;
    int& countRef = count;
    auto myAuto = countRef;

    countRef = 11;
    cout << count << " ";

    myAuto = 12;
    cout << count << endl;
}
Как видно, здесь используется auto, которое описано в c++11. Пытаюсь скомпилировать:
$ gcc -std=c++11 delme.cpp 
/tmp/ccrF4TIa.o: In function `main':
delme.cpp:(.text+0x38): undefined reference to `std::cout'
delme.cpp:(.text+0x3d): undefined reference to `std::ostream::operator<<(int)'
delme.cpp:(.text+0x4d): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
delme.cpp:(.text+0x64): undefined reference to `std::cout'
delme.cpp:(.text+0x69): undefined reference to `std::ostream::operator<<(int)'
delme.cpp:(.text+0x71): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
delme.cpp:(.text+0x79): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccrF4TIa.o: In function `__static_initialization_and_destruction_0(int, int)':
delme.cpp:(.text+0xab): undefined reference to `std::ios_base::Init::Init()'
delme.cpp:(.text+0xc2): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccrF4TIa.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status

$ gcc --version
gcc (Gentoo 4.7.3 p1.0, pie-0.5.5) 4.7.3
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ emerge -pv gcc

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] sys-devel/gcc-4.7.3:4.7  USE="cxx fortran mudflap nls nptl openmp (-altivec) -doc (-fixed-point) -gcj -go -graphite -gtk (-hardened) (-libssp) -lto (-multilib) -multislot -nopie -nossp -objc -objc++ -objc-gc -regression-test -vanilla" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

ЧЯДНТ?

★★★★★

Ответ на: комментарий от Stil

Не зря написал тег «туплю»...

Спасибо тебе, мил человек!

Kroz ★★★★★
() автор топика

кстати gcc уже поддерживает c++ 11 в полном объёме? и если да то с какой версии? у меня 4.7...

mbivanyuk ★★★★★
()
Ответ на: комментарий от AIv

я тоже так сначала думал...однако вот с официального сайта:

For information about C++11 support in a specific version of GCC, please see:

GCC 4.3 C++0x Status GCC 4.4 C++0x Status GCC 4.5 C++0x Status GCC 4.6 C++0x Status GCC 4.7 C++11 Status GCC 4.8 C++11 Status

и то как я понял в полном объёме только начиная с 4.8.1

mbivanyuk ★★★★★
()
Ответ на: комментарий от mbivanyuk

Я пока не нашел конструкций который бы мой 4.4.5-8 не поддерживал. Правда мне и надо пока немного - static_assert, variadic template да auto.

AIv ★★★★★
()
Ответ на: комментарий от AIv

мне показалось что в 4.4 перегрузка конструкторов классов работает как-то странно...через раз...но возможно виноваты мои не совсем прямые руки...утверждать точно не могу...но полная поддержка с++11 да, с 4.8.1

mbivanyuk ★★★★★
()
Ответ на: комментарий от AIv

Я пока не нашел конструкций который бы мой 4.4.5-8 не поддерживал.

А что там искать, если у них на сайте всё написано: http://gcc.gnu.org/projects/cxx0x.html

Сходу, чего мне бы не хватало в 4.4: nullptr, non-static data member initializers, template aliases, inheriting constructors и т. д.

DarkEld3r ★★★★★
()
Ответ на: комментарий от mbivanyuk

но полная поддержка с++11 да, с 4.8.1

К ожалению, это только «полная поддержка» со стороны компилятора. В libstdc++ регекспы из нового стандарта не поддерживаются совсем, например... http://gcc.gnu.org/onlinedocs/libstdc /manual/status.html#status.iso.200x

DarkEld3r ★★★★★
()
Ответ на: комментарий от mbivanyuk

да, вы правы...я упустил из виду libstdc++...получается ситуация со поддержкой стандарта с++11 ещё хуже...

Ну всё не так плохо. Тем более, что фичи библиотеки часто можно заменить, например, бустом.

И у майкрософта ситуация гораздо хуже, может это утешит. (:

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.