Hi I am first time boost user. I build it using following procedure on Ubuntu Linux 14.04. cd /boost-src/ ./bootstrap.sh 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: libboost_system.so.1.57.0: 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: https://gist.github.com/vivithemage/9517678 Where I am doing wrong? -- Thanks Arshpreet Singh http://arshpreetsingh.wordpress.com/ “If we all did the things we are really capable of doing, we would literally astound ourselves …” T. E. ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/
On 12/01/2014 02:05 PM, Great Avenger Singh wrote:
Hi I am first time boost user. I build it using following procedure on Ubuntu Linux 14.04.
cd /boost-src/ ./bootstrap.sh 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: libboost_system.so.1.57.0: cannot open shared object file: No such file or directory
Hi, You need to run it as LD_LIBRARY_PATH=/home/metal-machine/boost-src/stage/lib Default linking on Linux is shared, and to run executable that is linked against shared library in non-system location, you need to specify that non-system location at runtime. -- Vladimir Prus CodeSourcery / Mentor Embedded http://vladimirprus.com
On Mon, 1 Dec 2014 16:35:25 +0530
Great Avenger Singh
Hi I am first time boost user. I build it using following procedure on Ubuntu Linux 14.04.
cd /boost-src/ ./bootstrap.sh 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: libboost_system.so.1.57.0: 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: https://gist.github.com/vivithemage/9517678
Where I am doing wrong?
Do you have boost 1.54/1.55 installed in a standard location? Try, eg: $ locate libboost_system.so On my 14.04, I see: /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.55.0 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 ld.so where to find them at run time. (man ld.so) 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) M
participants (3)
-
Great Avenger Singh
-
Matei David
-
Vladimir Prus