2017-01-06 26 views
1

私はここで何を見ているのか分かりません。以下のテスト結果は、OS X 10.5.8を実行している古いPowerMac G5のものです。ビッグエンディアンのPowerPC cpuのテストのためにまだそれがあります。コンパイラはGCC 5.4であり、MacPortsによって提供されています。エラー: '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"

+0

あなたがMacである考えると、あなたは4.2ヘッダを使用していないことを確認してください。 –

+0

@BaummitAugen - '/ .../opt/local/include/gcc5/C++/cmath' *は期待されるヘッダを使用していますか? – jww

+0

私はOSX 10.11.4(Intel i7)で、g ++ - 6(Homebrew経由でインストールされている)とclang ++の両方で試してみました。コンパイルして正常に動作します。 – fedepad

答えて

0

Why is the program failing to compile?

Issue 79017: Old PowerMac G5, MacPorts GCC 5.4, C++11 and "std::log2 has not been declared"でのGCCのレポートでは、GCCの開発者からいくつかの良いコメントを得ました。 Jonathan Wakely and the results of the program belowによると

test.cxx:53:21: error: 'llrint' was not declared in this scope 
llrint(0.0); 

test.cxx:54:23: error: 'llrintf' was not declared in this scope 
llrintf(0.0f); 

test.cxx:55:23: error: 'llrintl' was not declared in this scope 
llrintl(0.0l); 

test.cxx:56:22: error: 'llround' was not declared in this scope 
llround(0.0); 

test.cxx:57:24: error: 'llroundf' was not declared in this scope 
llroundf(0.0f); 

test.cxx:58:24: error: 'llroundl' was not declared in this scope 
llroundl(0.0l); 

Because these six functions are missing we treat all C99 math functions as missing. We could split the checks into two pieces, so we check for these separately, which would allow the rest of the C99 math library to be imported into namespace std.


#include <math.h> 
int main() { 
      typedef double_t my_double_t; 
      typedef float_t my_float_t; 
      acosh(0.0); 
      acoshf(0.0f); 
      acoshl(0.0l); 
      asinh(0.0); 
      asinhf(0.0f); 
      asinhl(0.0l); 
      atanh(0.0); 
      atanhf(0.0f); 
      atanhl(0.0l); 
      cbrt(0.0); 
      cbrtf(0.0f); 
      cbrtl(0.0l); 
      copysign(0.0, 0.0); 
      copysignf(0.0f, 0.0f); 
      copysignl(0.0l, 0.0l); 
      erf(0.0); 
      erff(0.0f); 
      erfl(0.0l); 
      erfc(0.0); 
      erfcf(0.0f); 
      erfcl(0.0l); 
      exp2(0.0); 
      exp2f(0.0f); 
      exp2l(0.0l); 
      expm1(0.0); 
      expm1f(0.0f); 
      expm1l(0.0l); 
      fdim(0.0, 0.0); 
      fdimf(0.0f, 0.0f); 
      fdiml(0.0l, 0.0l); 
      fma(0.0, 0.0, 0.0); 
      fmaf(0.0f, 0.0f, 0.0f); 
      fmal(0.0l, 0.0l, 0.0l); 
      fmax(0.0, 0.0); 
      fmaxf(0.0f, 0.0f); 
      fmaxl(0.0l, 0.0l); 
      fmin(0.0, 0.0); 
      fminf(0.0f, 0.0f); 
      fminl(0.0l, 0.0l); 
      hypot(0.0, 0.0); 
      hypotf(0.0f, 0.0f); 
      hypotl(0.0l, 0.0l); 
      ilogb(0.0); 
      ilogbf(0.0f); 
      ilogbl(0.0l); 
      lgamma(0.0); 
      lgammaf(0.0f); 
      lgammal(0.0l); 
      llrint(0.0); 
      llrintf(0.0f); 
      llrintl(0.0l); 
      llround(0.0); 
      llroundf(0.0f); 
      llroundl(0.0l); 
      log1p(0.0); 
      log1pf(0.0f); 
      log1pl(0.0l); 
      log2(0.0); 
      log2f(0.0f); 
      log2l(0.0l); 
      logb(0.0); 
      logbf(0.0f); 
      logbl(0.0l); 
      lrint(0.0); 
      lrintf(0.0f); 
      lrintl(0.0l); 
      lround(0.0); 
      lroundf(0.0f); 
      lroundl(0.0l); 
      nan(0); 
      nanf(0); 
      nanl(0); 
      nearbyint(0.0); 
      nearbyintf(0.0f); 
      nearbyintl(0.0l); 
      nextafter(0.0, 0.0); 
      nextafterf(0.0f, 0.0f); 
      nextafterl(0.0l, 0.0l); 
      nexttoward(0.0, 0.0); 
      nexttowardf(0.0f, 0.0f); 
      nexttowardl(0.0l, 0.0l); 
      remainder(0.0, 0.0); 
      remainderf(0.0f, 0.0f); 
      remainderl(0.0l, 0.0l); 
      remquo(0.0, 0.0, 0); 
      remquof(0.0f, 0.0f, 0); 
      remquol(0.0l, 0.0l, 0); 
      rint(0.0); 
      rintf(0.0f); 
      rintl(0.0l); 
      round(0.0); 
      roundf(0.0f); 
      roundl(0.0l); 
      scalbln(0.0, 0l); 
      scalblnf(0.0f, 0l); 
      scalblnl(0.0l, 0l); 
      scalbn(0.0, 0); 
      scalbnf(0.0f, 0); 
      scalbnl(0.0l, 0); 
      tgamma(0.0); 
      tgammaf(0.0f); 
      tgammal(0.0l); 
      trunc(0.0); 
      truncf(0.0f); 
      truncl(0.0l); 
      return 0; 
} 
関連する問題