Reputation: 35992
I have seen the given two makefiles as follows:
all: thread1 thread2 thread3
CFLAGS=-I/usr/include/nptl -D_REENTRANT
LDFLAGS=-L/usr/lib/nptl -lpthread
clean:
rm -f thread1 thread2 thread3
######################
all: thread1 thread2 thread3
CFLAGS=-D_REENTRANT
LDFLAGS=-lpthread
clean:
rm -f thread1 thread2 thread3
Without using makefile, what is the correct command line to compile the thread1.c with gcc?
gcc -o thread1 CFLAGS=-I/usr/include/nptl -D_REENTRANT LDFLAGS=-L/usr/lib/nptl -lpthread thread1.c
Upvotes: 1
Views: 21764
Reputation: 2398
Your question is answered here
gcc: Do I need -D_REENTRANT with pthreads?
Essentially all you need is
gcc thread1.c -o thread1 -pthread
and gcc will handle all the defines for you.
Upvotes: 4
Reputation: 93468
If your code don't have external dependencies beyond pthread:
gcc thread1.c -o thread1 -D_REENTRANT -lpthread
Defining _REENTRANT causes the compiler to use thread safe (i.e. re-entrant) versions of several functions in the C library.
Upvotes: 2
Reputation: 225172
Those two makefiles will generate two different sets of command-line arguments. You could check it yourself just by running make
:
$ make -f makefile1
cc -I/usr/include/nptl -D_REENTRANT -L/usr/lib/nptl -lpthread thread1.c -o thread1
$ make -f makefile2
cc -D_REENTRANT -lpthread thread1.c -o thread1
Choose your favourite.
Upvotes: 1
Reputation: 477512
Almost:
gcc -o thread1 -I/usr/include/nptl -D_REENTRANT -L/usr/lib/nptl thread1.c -lpthread
The *FLAGS
variables contain the arguments that are passed to the compiler and linker invocartion, respectively. (In your case you're compiling and linking in one go.) Make sure to add libraries after your own object files.
Upvotes: 1