Anya Chan
Anya Chan

Reputation: 104

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

I am creating many threads and each one should output a random number.

I know that srand() with rand is not thread-safe and indeed all the output numbers are the same.

So I tried to use rand_r but I get the following error on my Windows terminal

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

Thank you

Upvotes: 2

Views: 1141

Answers (2)

wcochran
wcochran

Reputation: 10896

I needed to specify a late enough Posix source to avoid this warning, e.g.:

gcc -Wall -std=c11 -D_POSIX_C_SOURCE=199506L pi.c -o pi -lm -lpthread

Upvotes: 0

Dimitrios Filippou
Dimitrios Filippou

Reputation: 465

I saw from the post tags that you are using the "pthreads" library which stands for POSIX threads. Therefore this project cannot be run on Windows since it does not support the "lpthread" flag on your system.

If you insist on working on a Windows machine, you could use something like this which lets the developer work on an Ubuntu terminal from windows. While having access to an Ubuntu-like system where the lpthreads library is supported, you can move on with your project. Another possible solution could be using docker to compile & run your project on an isolated ubuntu environment but this is kind of an overkill.

Let me know if this helped!

Upvotes: 1

Related Questions