2015-02-09 4 views
2

Я установил gcc49 на FreeBSD10.1. Я пытаюсь использовать его для разработки на C++ 11. Тем не менее, каждый раз, когда я компиляции некоторые C++ 11 правильный код (да я использую -std=c++11), который использует специальные математические функции, он выплевывает ошибки, такие какg ++ include paths on freebsd

error: std::round is not a member of std 
/usr/include/math.h 

К примеру, здесь:

#include <cmath> 
#include <iostream> 

int main() 
{ 
    std::cout << std::round(10.1) << std::endl; 
} 

Так что, кажется, он пытается использовать старые включаемые файлы, которые пришли с FreeBSD, а не те, соответствующие новым gcc от /usr/local/lib/gcc49/include

Я попытался установить CPLUS_INCLUDE_PATH к /usr/local/lib/gcc49/include с не повезло, система по-прежнему пытается найти /usr/include.

я увидел, что это может быть ошибка в FreeBSD г ++, Getting GCC in C++11 mode to work on FreeBSD Однако даже при использовании -D_GLIBCXX_USE_C99 как предложено в https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194929 не решает проблему для математических функций.

Самая странная вещь, что я могу компилировать любые другие C++ 11 функций не из<cmath>, как std::stol, но должны использовать -D_GLIBCXX_USE_C99 флаг, как указано в сообщении об ошибке выше.

Любая идея, как сделать g ++ полностью функциональной с C++ 11 на FreeBSD 10.1?

+0

Вы запрашиваете C++ 11? – Deduplicator

+0

@Deduplicator да, мне нужна поддержка C++ 11 – vsoftco

+0

@mvw, я пробовал эту же проблему, похоже, не смог распознать математическую часть стандартной библиотеки C++ 11 – vsoftco

ответ

1

Это работает из коробки на 10.1, вам не нужны никакие хаки. Конечно, он работает только с -std = C++ 11, поскольку std :: round доступен только с 11 стандартных (см. http://en.cppreference.com/w/cpp/numeric/math/round).

$ freebsd-version -ku 
10.1-RELEASE 
10.1-RELEASE 
$ cat test.cc 
#include <cmath> 
#include <iostream> 

int main() { 
    std::cout << std::round(10.1) << std::endl; 
} 
$ g++5 -std=c++11 -o test test.cc 
$ ./test 
10 

Примечание: gcc был скомпилирован из портов, пакет, как сообщается, не работает. Вероятно, потому что пакеты для 10.1 на момент написания скомпилированы на 10.0, которые все еще имели проблемы совместимости C++ 11.

+0

Извините, я поставил вопрос с gcc5, но я использовал gcc49. Попробуем gcc5. – vsoftco

+0

Он работает так же с gcc48 и gcc49 – Elisey

+0

Я только что использовал самую последнюю стабильную версию 10.1/amd64 (загрузил изображение установщика с веб-сайта FreeBSD freebsd.org/where.html) внутри VirtualBox и установил g ++ 49 с 'pkg установите lang/gcc49'. Вышеприведенный код не компилировался. Как вы установили компилятор? Я не скомпилировал его из источника. – vsoftco

Смежные вопросы