|
Boost Users : |
From: Ben Hutchings (ben.hutchings_at_[hidden])
Date: 2003-04-22 05:28:10
subsample <knuarv_at_[hidden]> wrote:
> Failing to link a program with libboost_thread, even though I supply
> the -lboost_thread directive in the makefile. I'm kind of new to
> makefiles, having only used Visual C++ in Windows untill recently. I
> 've tried changing things around a bit, doesn't help. A minimal test
> program I wrote links fine with boost_thread though. My makefile looks
> like this:
> CC=g++
> CFLAGS=-g
> LDFLAGS=-L/home/sub/Libs/alsa/lib -lasound -lboost_thread -lpthread
>
> alsatest: alsatest.o
> $(CC) $(LDFLAGS) -o alsatest SmallObj.o alsatest.o
<snip>
ld doesn't work this way. -l is just a shortcut for finding a library
file. The libraries specified with -l are part of the file list, same
as the object files and any library files specified by their full file
name. The nasty thing is that backwards references are only resolved
in object files, not in library files, so library files must be listed
after the object files (and any other library files) that reference
them.
You need to take the libraries from LDFLAGS (perhaps into another
variable) and put them at the end of the command line.
Also you should be using CXX and CXXFLAGS for compiling C++ code, not
CC and CFLAGS.
Since you're building a pthreads program, you *must* define the macro
_REENTRANT to get a threadsafe C library. As a shortcut, include
-pthread in CXXFLAGS (this causes linking with -lpthread, too).
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net