【问题标题】:rand_r not in scope, gcc mingw under cygwin on windowsrand_r 不在范围内,Windows 上 cygwin 下的 gcc mingw
【发布时间】:2013-08-29 13:45:59
【问题描述】:

我正在尝试将一些代码从 linux 移植到 cygwin 下的 windows。我发现这个奇怪的错误,“rand_r 没有在这个范围内声明”。我使用 gcc 4.8.1 作为 x86_64-w64-mingw32 并且在它的搜索路径(-v 选项)中它确实在正确的目录中查找。头文件已正确包含。我正在寻找解决这个问题的想法。是否有一些关于 cygwin 的事实我错过了,因此有这个问题?有没有办法检查 gcc 是否真的接触了所需的文件?

【问题讨论】:

  • 可能是因为rand_rglibc函数,至少gcc-mingw没有使用glibc作为C库实现。
  • 我发现不是。你对我应该在 gcc-mingw 下使用哪个函数有什么建议吗?

标签: c++ windows gcc cygwin


【解决方案1】:

与标准的rand 函数相比,rand_r 函数被认为是线程安全的。见man 3 rand_r

一种选择是通过包装对rand 的调用来实现rand_r。这可能是可取的,也可能不是可取的,并且正如手册所述,rand_r 无论如何都是一个相当弱的伪随机数生成器。

既然您正在使用 C++,为什么不看看新的random number libraries 可用。它们是线程安全的、可移植的,并且产生更好的随机结果。 This question,虽然不是一个真正的问题,但仍然包含一些有关如何使用该库的有用信息。

如果您没有可用的 C++11 随机类,Boost 也有一个 implementation

【讨论】:

  • 谢谢。我将继续使用rand,直到该部分代码的作者切换到 boost。
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 2020-02-15
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多