Boost Compiled Libraries in 3 Minutes

Boost is mostly made of just header files, as we saw last week, which means you include them in your source, add the correct namespace and you’re good to go.

However, there are a handful of compiled libraries too, so let’s take a very quick look at how we can use these. If you haven’t installed Boost, take a look at Boost in 3 Minutes to get you up and running.

 

1) Include the header of the library you are interested in using

I’m going to use the filesystem library:

#include <boost/filesystem.hpp>

Time taken: 30 seconds

 

2) Write some code using this library

Don’t forget to qualify the methods with a namespace (else it will not compile!)

#include <boost/filesystem.hpp>
#include <iostream>

int main()
{
    //don't forget this bit!
    using namespace boost::filesystem;

    path p("/var/log/dmesg");

    if (exists(p))
    {
        std::cout << p << " size is " 
            << file_size(p) << std::endl;
    }

    return 0;
}

Time taken: 2 minutes

 

3) Compile your code with the boost libraries

Now, instead of just compiling our file, we have to include the filesystem library and let the compiler know where it lives:

g++ boost.cpp -I/usr/include/boost -lboost_filesystem -lboost_system

To clarify, the line above is made up of the following things:

 

Firstly I’ve passed the source code file to the compiler.

Secondly I’ve added the path to boost using the -I option.

Thirdly I’ve added the libraries I want to link to using -l.

 

In this case there are two libraries that I need to include, as the filesystem binary depends on the system binary. You will get a linker error if there are any dependencies when you include your initial library. This will tell you what else you might need to add.

Time taken: 30 seconds

 

 

The output of the little program above should be something like:

/var/log/dmesg size is 61318

And there you have it – boost compiled libraries in under 3 minutes 🙂


One Comment

  1. Posted 31 July 2012 at 22:51 | Permalink

    Using boost::filesystem, Is there a way to get the directory in which the current executable is located?