2013-08-26 5 views
2

Я пытаюсь перенести некоторый код из linux в windows под cygwin. Я нахожу эту странную ошибку, когда «rand_r не объявляется в этой области». Я использую gcc 4.8.1 как x86_64-w64-mingw32, а в его пути поиска (-v) он выглядит в правильных каталогах. Заголовочные файлы включены правильно. Я ищу идеи для решения этой проблемы. Есть ли какой-то факт о cygwin, которого я упускаю и поэтому имею эту проблему? Есть ли способ проверить, действительно ли gcc касается необходимых файлов?rand_r не в области, gcc mingw под cygwin на окнах

+0

Возможно, потому что 'rand_r' является функцией' glibc', и по крайней мере gcc-mingw не использует 'glibc' в качестве реализации библиотеки C. –

+0

Я вижу, что это не так. У вас есть предложение о том, какую функцию я должен использовать вместо gcc-mingw? –

ответ

2

Функция rand_r считается безопасной по потоку, по сравнению со стандартной функцией rand. См. man 3 rand_r.

Один из вариантов заключается в том, чтобы реализовать rand_r путем обертывания вызова rand. Это может быть или не быть желательным, и, как указано в руководстве, rand_r является достаточно слабым генератором псевдослучайных чисел.

Увидев, что вы используете C++, почему бы не взглянуть на новый random number libraries. Они потокобезопасны, переносятся и производят гораздо лучшие случайные результаты. This question, хотя закрыт как не настоящий вопрос, по-прежнему содержит полезную информацию о том, как использовать библиотеку.

Если у вас нет доступных классов C++ 11, Boost также имеет implementation.

+0

Спасибо. Я собираюсь идти вперед и использовать 'rand', пока автор этой части кода не начнет увеличиваться. –

Смежные вопросы