Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost build and first program
From: Matei David (matei_at_[hidden])
Date: 2014-12-01 15:45:39

On Mon, 1 Dec 2014 16:35:25 +0530
Great Avenger Singh <arsh840_at_[hidden]> wrote:

> Hi I am first time boost user. I build it using following procedure on
> Ubuntu Linux 14.04.
> cd /boost-src/
> ./ and followed instructions. after the completion it gave
> me following suggestion:
> The Boost libraries were successfully built.
> Following directory should be included to compiler include paths;
> /home/metal-machine/boost-src
> Following directory should be included to linker library paths;
> /home/metal-machine/boost-src/stage/lib
> Now I try to compile and program with following options from command
> line:
> $ g++ -I "/home/metal-machine/boost-src/" -L
> "/home/metal-machine/boost-src/stage/lib/" boostlist.cpp
> -lboost_system -lboost_filesystem -o honey
> $ ./honey
> ./honey: error while loading shared libraries:
> cannot open shared object file: No such
> file or directory
> But on the other hand if I compile and run as follows:
> $ g++ boostlist.cpp -lboost_system -lboost_filesystem -o honey
> $./honey ->it works fine
> I am using thiscode:
> Where I am doing wrong?

Do you have boost 1.54/1.55 installed in a standard location? Try, eg:
$ locate

On my 14.04, I see:

So, both 1.54 and 1.55 libs are installed.

If that is the case, what's happening is that with the 2nd command
(the one without -L), gcc ends up using the existing boost, not 1.57
that you just compiled. You can always check what libraries the
executable is using with:
$ ldd honey

To fix this, one option is to install boost 1.57 under /usr/local. Then
you wouldn't need all those gcc options, because 1.57 would be found
ahead of others. I think that's what "b2 install" does.

If that is not an option (eg, no root), you need to install and use
1.57 from a non-standard location. In that case, you need to:
- Tell gcc where to find the boost 1.57 headers at compile time (use
  "-I", or better, "-isystem": man gcc).
- Tell gcc where to find the boost 1.57 libs at link time (use "-L")
- Tell where to find them at run time. (man

3 ways to do the last part:

1. Use no other gcc flags, but set environment variable LD_LIBRARY_PATH
before running the executable.

2. Set environment variable LD_RUN_PATH before running gcc.

3. Add gcc option "-Wl,-rpath=${path_to_libs}" (man ld)


Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at