Merrill Cornish wrote:
When I built Boost 1.33.0 for MinGW, I just specified the toolset. As a result I got 28! variants on the set of Boost libraries.
From the various file names, I can figure out most of the variants:
d = debug mt = multi-threaded s = static but there are other variants which aren't as obvious.
It's all explained in http://www.boost.org/more/getting_started.html#Results.
For example, what's the distinction among
boost-<libname>-mgw-1_33.dll boost-<libname>-mgw-1_33.lib boost-<libname>-mgw.lib
The two .lib files have the same sizes and timestamps, so they appear to be the same file with and without the Boost version in the name.
Yes.
Is the idea that if you use the library WITHOUT the version number suffix, then you can upgrade to a new version without having to modify your make file?
Yes. Assuming all you need to do is recompile. We don't assume binary compatibility between version.
OK, what's the distinction between the .dll and .lib? I understand that they linker needs one set of information about library function names and entry points while the actual function bodies are needed at run time. However, I thought all of that information is in the .dll file.
Sometimes. It's possible to not provide that information. The .lib is a convenience most people provide.
On the other hand, the .dll version is so much bigger than the .lib that there must be more than an entry point table involved.
Yea, that would be the code itself, plus debug symbols, etc.
Then there are the libboost-* variations...
As in the docs i point out above, those are static link (vs. dynamic link) versions.
I understand that in the Unix world, the -L linker option specifies the library directory while the -l<name> option tells the Unix linker to look for the lib<name>.a file.
It actually looks for lib<name>.so then lib<name>.a, assuming your system supports dynamic linking.
OK, but how does that work with MinGW's ld.exe linker on Windows.
Same, except it searches for <name>.lib, <name>.dll, and lib<name>.lib (and some other variations on that that I don't remember right now).
Some of the libraries are available only in the static version, but the only static libraries are the libboost-* variants.
That's what it means to have only static versions.
There is a statement somewhere in the Boost library documention that the selection of libraries should be automatic in Windows because of pragma's in the libraries. However, I haven't been able to find where MinGW supports that pragma.
I don't think MinGW (aka GCC) has the pragma, and most likely that functionality is not supported in this case. -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - Grafik/jabber.org