【cocos2dx】CCProfiling.cpp で[std::chrono::_V2::system_clock::now()] に関するエラーを解消する

Android側のエラーなのですが、CCProfiling.cppで「std::chrono::_V2::system_clock::now()」が定義されていないとエラーが出ました。 原因はわかりませんが、エラーが出なくなりましたので、もし同じような症状が出る場合は参考にしてみてください。

エラー箇所

cocos2dxのVer3.1を利用。 共に同じ原因で、CCProfiling.cppで3つエラーが出ます。 [c]

void ProfilingTimer::reset() { numberOfCalls = 0; averageTime1 = 0; averageTime2 = 0; totalTime = 0; minTime = 100000000; maxTime = 0; _startTime = chrono::high_resolution_clock::now(); // ここ }

void ProfilingBeginTimingBlock(const char timerName) { Profiler p = Profiler::getInstance(); ProfilingTimer* timer = p->_activeTimers.at(timerName); if( ! timer ) { timer = p->createAndAddTimerWithName(timerName); }

timer->numberOfCalls++;

// should be the last instruction in order to be more reliable
timer->_startTime = chrono::high_resolution_clock::now(); // ここ

}

void ProfilingEndTimingBlock(const char *timerName) { // should be the 1st instruction in order to be more reliable  auto now = chrono::high_resolution_clock::now();// ここ

Profiler* p = Profiler::getInstance();
ProfilingTimer* timer = p->_activeTimers.at(timerName);

CCASSERT(timer, "CCProfilingTimer  not found");


long duration = static_cast<long>(chrono::duration_cast<chrono::microseconds>(now - timer->_startTime).count());

timer->totalTime += duration;
timer->_averageTime1 = (timer->_averageTime1 + duration) / 2.0f;
timer->_averageTime2 = timer->totalTime / timer->numberOfCalls;
timer->maxTime = MAX( timer->maxTime, duration);
timer->minTime = MIN( timer->minTime, duration);

}

[/c]

エラー内容は [c] undefined reference to "std::chrono::_V2::system_clock::now()" [/c]

エラー解消

一度この3箇所をコメントアウトをして、Eclipseでビルドをします。 おそらく、エラーが出ます。(これは、nowが定義されていないというエラーだと思います)

次に、3箇所のコメントアウトを消して、再度ビルドをしてみます。 そうするとエラーが出なくなります。

  1. エラー箇所をコメントアウトして、ビルド。
  2. コメントアウトを削除して、ビルド。

もし、同じエラーが出た場合、一度上記の方法を試してみてください。