I think a deeper answer than “Read the F * cking manual” might be helpful!
Such a link error is the key you are trying to link to an incompatible Boost library.
I got this when I mistakenly built a 32-bit Boost thread library, when it seemed to me that I was building a 64-bit library. It took a while to realize that when you say --address-model=64 as the bjam command-line option, you made a subtle mistake. The address-model parameter must NOT have the -- prefix. Unfortunately, bjam does not tell you when it sees the wrong syntax.
You can use the dumpbin program to check the characters provided by your library, compared to characters that, according to the linker, are not allowed. I found that the library symbols were decorated with __thiscall , not __cdecl . This is a flashy good sign of architecture mismatch. The Microsoft compiler uses the __thiscall function call protocol for 32-bit assemblies, but it uses __cdecl for 64-bit assemblies. Yes, Microsoft documentation is a bit weak here!
The best way to check .lib or .dll to see how it was created is to use dumpbin. Here is an example:
dumpbin /headers libboost_thread-vc100-mt-gd-1_45.lib | findstr machine
You will need to adjust the name of the library to match what you link, of course. This will definitely show you whether .lib or .dll is for x86 (this is the 32-bit version) or x64 (64-bit version).
TangoBravoMike
source share