Boost logo

Boost Users :

From: Dan Thill (dgt_at_[hidden])
Date: 2008-04-13 18:17:31


> I think the problem is that you are using a static library which
> contains the serialization code. Static libraries are notorious for not
> linking code that is never directly called. So the solution is to
> include the object files contained in your static library into your
> executable/dll. For Visual C++, there is no command line linker option
> as I understand it. On gcc, you can do g++ -Wl,--whole-archive if memory
> serves (which I'm sure it doesn't)

I'm beginning to see that this is the case. However, there are several
references on this list over the years for this exact organization. It
worked on 1.34.1 -- I suppose because BOOST_CLASS_EXPORT had to be
called in the header file. However, with 1.35, the new system which
avoids the header ordering issue, which requires BOOST_CLASS_EXPORT to
be in the implementation file, breaks this approach. I thought that was
one of the benefits of the new system: to better force instantiation of
the static objects which make the registration work.

And, according to the trunk version, putting serialization code in DLLs
is supposed to work--using the same organization I'm trying to use now.
  But it looks like it won't work with static libs.

I'm sorry if I sound irate. I'm just extremely frustrated. I went
through all the effort to put the 1.34.1 serialization into its own
library in order to fix compilation time problems in our product. And
then, a few days later, 1.35 is released, breaking everything. (and for
various platform issues, we need to move to 1.35).

-Dan


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net