$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Oliver Kullmann (O.Kullmann_at_[hidden])
Date: 2004-12-06 03:41:41
On Mon, Dec 06, 2004 at 10:29:23AM +0300, Vladimir Prus wrote:
> Hi Oliver,
>
> > Hello,
> >
> > I would like to report 3 issues with the
> > program_options library, 2 of which seem
> > critical to me:
>
> First of all, please don't ask questions by replying to unrelated messages,
> this causes inconvenience for reading.
>
Hi,
don't know what you mean here (I didn't reply to anything?!).
> > 1) The class boost::program_options::value_semantic
> > is a polymorphic class (has virtual functions), but
> > has a non-virtual destructor.
>
> Excuse me, but here's the code that *I* see:
>
> class BOOST_PROGRAM_OPTIONS_DECL value_semantic {
> public:
> ............
> virtual ~value_semantic() {}
> };
>
> Now, you must be either looking at a different class, or at a pre-release
> version of the library (though I think dtor was virtual all the time), or
> overlooked this definition.
>
Good to hear; then the documentation is (fortunately) wrong (it actually has
problems at many places):
boost_1_32_0/doc/html/value_semantic.html
class value_semantic {
public:
// construct/copy/destruct
~value_semantic();
> > Perhaps the following crash, when using program_options in a trivial
> > way, is already caused by this error.
> >
> > 2) Consider the following program "Error_program_options"
> >
> > #include <boost/program_options.hpp>
> > int main() {
> > boost::program_options::options_description d("Options");
> > }
> >
> > I compiled it (using g++, version 3.4.3) via
> >
> >> g++ -g Error_program_options.cpp -lboost_program_options-gcc
> >
> > I got the warning
> >
> > /usr/bin/ld: warning: libstdc++.so.5, needed by
> > /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../libboost_program_options-gcc.so,
> > may conflict with libstdc++.so.6
> >
> > (see point 3), but this doesn't seem to be of importance here.
>
> Actually, this means that you've built program_options with g++ 3.3 and
> compile you program with g++ 3.4. The C++ standard library is not
> compatible in those versions, so anything can happen, including a crash.
>
As I said, I did built Boost with g++ 3.4.3; so I think under certain circumstances
the build doesn't work. (By the way, the previous version of g++ on that system was
3.4.2.)
In any case, it seems that the Boost documentation does not contain at any place a
detailed description how to link, and that seems to be something worth adding.
> This example works for me, when g++ 3.3 is used for everything.
>
> > Reading symbols from /lib/ld-linux.so.2...done.
> > Loaded symbols for /lib/ld-linux.so.2
> > #0 0x0804923a in boost::detail::sp_counted_base::release()
> > #(this=0x838dffff)
> > at shared_count.hpp:142
> > 142 long new_use_count = --use_count_;
> >
> >
> > Thus it could be, that the problem reported unter 1) causes the crash here
> > (on the other hand, actually for the above trivial program no object of
> > type value_semantic seems to be created, but unfortunately I don't have
> > the time to investigate this further).
>
> It seems likely that mixing code compiled with 3.3 and 3.4 is the reason for
> the crash.
>
should be; as I said, I did built Boost with 3.4.3, and that we get a crash seems to indicate to
me, that at least in the documentation of Boost in general there should be paid more attention
to linking issues.
Oliver