|
发表于 2022-8-18 20:48:23
只看该作者
5#
terminate called after throwing an instance of 'std::runtime_error'
what(): random_device::random_device(const std::string&)
问题的原因:
是因为random_device会打开/dev/random或者/dev/urandom,你的文件系统中没有这个设备,进而抛出了异常;
/dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。很多解密程序与安全应用程序(如SSH Keys,SSL Keys等)需要它们提供的随机数据流。
这两个设备的差异在于:/dev/random的random pool依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用, /dev/random设备可以保证数据的随机性。/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高。
解决的方法:
如果你的文件系统在启动的是没有创建设备,可以创建一个:
mknod -m 644 /dev/random c 1 8
mknod -m 644 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
根本的解决方法是,查看内核是不是加载了该字符设备的原因。 |
|