考虑以下代码
#include <chrono>
#include <iostream>
#include <thread>
int main()
{
using std::chrono::system_clock;
using std::chrono::milliseconds;
using std::chrono::nanoseconds;
using std::chrono::duration_cast;
const auto duration = milliseconds(100);
const auto start = system_clock::now();
std::this_thread::sleep_for(duration);
const auto stop = system_clock::now();
const auto d_correct = duration_cast<nanoseconds>(duration).count();
const auto d_actual = duration_cast<nanoseconds>(stop - start).count();
std::cout << "Difference is " << d_actual << ", and it should be roughly " << d_correct << "\n";
}
我们期望的是
差是100039989,应该是100000000左右
请参阅此演示,它工作得非常好。
但是,在我的机器上,根据Stack Overflow 上的这个答案,安装了几个编译器似乎会导致配置错误。
因此我尝试了建议的修复:设置正确的LD_LIBRARY_PATH
. 这些是我尝试过的输出组合(其中包括 4.4 和 4.6...)
g++-4.7 time.cpp -pthread -std=c++11; LD_LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.7/ ./a.out
差是100126,应该是100000000左右
g++-4.7 time.cpp -pthread -std=c++11; LD_LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.8/ ./a.out
差是100132,应该是100000000左右
g++-4.8 time.cpp -pthread -std=c++11; LD_LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.7/ ./a.out
差100085953,应该是100000000左右
g++-4.8 time.cpp -pthread -std=c++11; LD_LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.8/ ./a.out
差100156418,应该是100000000左右
似乎无论如何,使用g++-4.8
任何.libstdc++
g++-4.7
我在编译器/二进制调用中做错了什么还是它是一个错误g++-4.7
?(这是g++-4.7.3
和g++-4.8.1
)
对于(可能是最丑陋的)解决方法,我当然可以测量一小段时间,将其与预期差异进行比较并得出一个因素。但是我非常想优雅地解决这个问题。