在 Windows 上编译多线程 C 程序时,使用 rand_r 出现未声明的函数和未定义的符号错误

Getting undeclared function and undefined symbol errors with rand_r when compiling a multithread C program on Windows

我正在创建很多线程,每个线程都应该输出一个随机数。

我知道 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

谢谢

我从 post 标签中看到您正在使用代表 POSIX 线程的 "pthreads" 库。因此,该项目不能在 Windows 上 运行,因为它不支持您系统上的 "lpthread" 标志。

如果您坚持在 Windows 机器上工作,您可以使用 this 之类的东西,它可以让开发人员在 Ubuntu 终端上工作 windows。在访问支持 lpthreads 库的 Ubuntu-like 系统时,您可以继续您的项目。另一种可能的解决方案是使用 docker 在隔离的 ubuntu 环境中编译 & 运行 你的项目,但这有点矫枉过正。

如果有帮助请告诉我!