Получение необъявленной функции и неопределенных ошибок символов с помощью rand_r при компиляции многопоточной программы на C в Windows - PullRequest
1 голос
/ 23 мая 2019

Я создаю много потоков, и каждый из них должен вывести случайное число.

Я знаю, что srand() с rand не является потокобезопасным, и на самом деле все выходные числа одинаковы.

Поэтому я попытался использовать rand_r, но на моем терминале Windows появляется следующая ошибка

main.c:47:16: warning: implicit declaration of function 'rand_r'; did you mean 'rand'? [-Wimplicit-function-declaration]
 result= ( (rand_r(&seed) % (high+1-low) ) + low);
            ^~~~~~
            rand
main.c: In function 'customerServe':
main.c:333:1: warning: control reaches end of non-void function [-Wreturn-type]
}

c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: 
C:\Users\allys\AppData\Local\Temp\ccSslADA.o:main.c:(.text+0xe): undefined 
reference to `rand_r'
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: 
C:\Users\allys\AppData\Local\Temp\ccSslADA.o:main.c:(.text+0x41c): 
undefined reference to `rand_r'
collect2.exe: error: ld returned 1 exit status

Спасибо

1 Ответ

1 голос
/ 24 мая 2019

Я видел по тегам записей, что вы используете библиотеку "pthreads", которая обозначает потоки POSIX. Поэтому этот проект не может быть запущен в Windows, так как он не поддерживает флаг «lpthread» в вашей системе.

Если вы настаиваете на работе на Windows-машине, вы можете использовать что-то вроде this , которое позволяет разработчику работать на терминале Ubuntu из windows . Имея доступ к Ubuntu-подобной системе, где поддерживается библиотека lpthreads, вы можете продолжить работу над своим проектом. Другим возможным решением может быть использование docker для компиляции и запуска вашего проекта в изолированной среде Ubuntu, но это своего рода излишество.

Дайте мне знать, если это помогло!

...