T33C
T33C

Reputation: 4429

How to link Boost in a dependent static library

In MS Visual C++ 2010

I had a single C++ project in my solution which used boost and worked perfectly.

I then decided to convert this project into a static library and create a new project which depends on this static library.

Now, my converted static library builds without errors and warnings (compiler and linker) but the new project compiles but does not link.

I am getting:

1>LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc100-mt-1_45.lib'

As a test I added the full directory path to the linker options for this library... and then it complained about

1>LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_45.lib'

I have now added complete paths to all the libraries and it now builds and run.

I am not happy with this solution because:

  1. I don't want users of the library to have to worry about linking in boost.
  2. It is messy

I know an answer would be to create a DLL but is there a way to do this statically and keep the linking at my static library level.

Edit:

If I tell the .exe linker to ignore the boost libs explicitly then it all is ok except the .exe should not have to worry about boost at all.

/NODEFAULTLIB:"libboost_thread-vc100-mt-1_45.lib" /NODEFAULTLIB:"libboost_date_time-vc100-mt-1_45.lib"

Upvotes: 24

Views: 36950

Answers (3)

user52875
user52875

Reputation: 3058

Apparently you don't need the .libs, as your exe also links without them. You seem to be using boost header-only methods and classes. So just tell boost to disable auto linking by defining the preprocessor symbol BOOST_ALL_NO_LIB in your project.

If you want to make your .lib unnecessary big by including all of boost, this question seems to hold an answer (which I never really tried myself): Linking static libraries to other static libraries

Upvotes: 27

yasouser
yasouser

Reputation: 5177

Did you build boost library? There are certain libraries in Boost that needs to be compiled. In case if you haven't done that, refer to "Getting started in Windows" on how to build the Boost library.

EDIT-1: Boost can be built both as a static and dynamically loadable (dll) libraries.

EDIT-2: If you have already built Boost, then the answer by @Daniel Gehriger tells you how to add it in VS.

Upvotes: 1

Daniel Gehriger
Daniel Gehriger

Reputation: 7468

When building your library, you can include the boost libraries in yours. To do so, in VisualStudio's Librarian > General property page, list your boost libraries as Additional Dependencies.

However, there may be a problem if your clients use boost themselves, and statically link to it (especially a different version than the one you are using).

Upvotes: 4

Related Questions