Я не уверен, что вижу здесь. Ниже приведены результаты испытаний от старой версии PowerMac G5, работающей под управлением OS X 10.5.8. Его все еще вокруг для тестирования под крупным процессором PowerPC. Компилятор - это GCC 5.4, и его предоставляет MacPorts.error: 'log2' не входит в группу 'std'
Программа испытаний приведена ниже. При компиляции он приводит к ошибке error: 'log2' is not a member of 'std'
.
$ cat test.cxx
#include <cmath>
int main(int argc, char* argv[])
{
double d = std::log2(2.3456789f);
return 0;
}
Согласно Is std::log2() an extension or C++ standard?, std::log2
должны быть доступны.
Почему программа не может скомпилировать?
$ /opt/local/bin/g++-mp-5 --version
g++-mp-5 (MacPorts gcc5 5.4.0_0) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
$ /opt/local/bin/g++-mp-5 -std=c++11 test.cxx -o test.exe
test.cxx: In function 'int main(int, char**)':
test.cxx:4:16: error: 'log2' is not a member of 'std'
double d = std::log2(2.3456789f);
^
test.cxx:4:16: note: suggested alternative:
In file included from /usr/include/math.h:26:0,
from /opt/local/include/gcc5/c++/cmath:44,
from test.cxx:1:
/usr/include/architecture/ppc/math.h:431:15: note: 'log2'
extern double log2(double);
^
Это может быть связано из-за старого оборудования: C++11 cmath functions not in std namespace for android NDK w/gcc-4.8 or clang 3.4. Я понимаю, что Android - это другая платформа.
Теперь откройте в системе отслеживания проблем MacPorts: Issue 53226: PowerMac, GCC 5.4 and "error: 'std::log2' has not been declared".
Теперь откройте в системе отслеживания проблем GCC: Issue 79017: Old PowerMac G5, MacPorts GCC 5.4, C++11 and "std::log2 has not been declared"
Учитывая вы на Mac, пожалуйста, убедитесь, что вы не используете 4.2 заголовки. –
@BaummitAugen - Does * '... from/opt/local/include/gcc5/C++/cmath' * указывает его использование ожидаемого заголовка? – jww
Просто FYI, я пробовал в OSX 10.11.4 (Intel i7) как с g ++ - 6 (устанавливается через Homebrew), так и с clang ++, и он компилируется и работает нормально. – fedepad