Boost logo

Boost Users :

Subject: Re: [Boost-users] [Test] failure linking tests dynamically
From: Latimerius (pvl_at_[hidden])
Date: 2014-11-08 11:37:19


Actually, please disregard the part about my own tests building but
crashing. I figured it out, it was due to a mismatch between standard
C++ library versions used by the shared library and the main program. I
do know I have to watch out for this as Boost build defaults to the
wrong one but during the attempts to make things work I apparently
wasn't careful enough and did a bad build. Sorry about that.

On Sat, Nov 08, 2014 at 04:54:07PM +0100, Latimerius wrote:

>
> Hello Richard,
>
> Thanks for your reply! Please see my comments inline.
>
> On Fri, Nov 07, 2014 at 04:14:41PM +0000, Richard wrote:
>
> > [Please do not mail me a copy of your followup]
> >
> > Latimerius <pvl_at_[hidden]> spake the secret code
> > <20141107175110.GA3432_at_[hidden]> thusly:
> >
> > >[...] However, all attempts so far failed due to
> > >
> > >Undefined symbols for architecture x86_64:
> > > "_main", referenced from:
> > > implicit entry/start for main executable
> > >ld: symbol(s) not found for architecture x86_64
> >
> > When you compiled your test program, did you define BOOST_TEST_MAIN in
> > one of your source files before including the boost.test headers?
>
> I was speaking here about the examples supplied with the library. My
> problem is that when I download Boost and compile it (using the
> procedure described in my previous message), the examples (in
> <boost_dir>/libs/test/example) don't build for me for some reason, and
> the error message is the one concerning missing main().
>
> As far as my own attempts go, those do build curiously enough, but the
> resulting program crashes while exiting the main function, and its
> output is garbled:
>
> Running 2 test cases...
> InputWindowTest.cpp:14: error in "=@???DP?:7|??DP???DP?:7|": check
> *** 1 failure detected (1953719668 failures expected) in test suite
> "Segmentation fault: 11
>
> The program is as follows:
>
> #include "InputWindow.h"
>
> #define BOOST_TEST_MODULE EventActionMgr
> #include <boost/test/unit_test.hpp>
>
> BOOST_AUTO_TEST_CASE (EventAction_test)
> {
> ui::EventAction a;
> BOOST_CHECK (a.RunHandlers () == true);
> }
>
> built with
>
> clang++ -g -Wall -std=c++11 -stdlib=libc++ -DBOOST_TEST_DYN_LINK -I.. -I
> ../../.. -I/usr/local/boost_1_57_0/include -L/usr/local/boost_1_57_0/lib
> InputWindowTest.cpp -o InputWindowTest -lboost_unit_test_framework
>
> I suspect memory corruption. The way the output is garbled varies with
> the argument of BOOST_TEST_MODULE. Whether I do or do not #define
> BOOST_TEST_MAIN doesn't seem to matter.
>
> As for where the crash happens: a test run with zero detected failures
> crashes after main(). A run with failures usually crashes while trying
> to print a failure. I suspect something wrong might be happening at the
> boundary between the main program and the shared library
> (libboost_unit_test_framework.dylib).
>
> > Someone needs to supply a definition of main and if you ask boost.test
> > to do it by defining that symbol before including the headers, it will
> > provide one for you.
> >
> > Try looking at my documentation here and see if this clears things up:
> > <http://user.xmission.com/~legalize/boost.test/libs/test/doc/html/test/guide/compilation/shared_library.html>
>
> Thanks for the link, that's good info! I somehow missed it before.
>
> Thanks again,
>
> pvl
>


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