Boost logo

Boost :

From: Jürgen Hunold (juergen.hunold_at_[hidden])
Date: 2007-05-15 05:33:42


Hi !

An'n Dingsdag 15 Mai 2007 hett Vladimir Prus schreven:
> Douglas Gregor wrote:
> > Our tests pass because BBv2 decides to put the archive file on the
> > link line:
> >
> > g++ -fPIC -o algorithms_test algorithms_test.o
> > libboost_unit_test_framework.a

No, it uses the static library, which has _main.

> Further, in my testing putting 'main' in static library works. I believe
> that even works on Windows. Furthermore, previous testing reveals that on
> Linux, putting 'main' in shared library works as well.

Correct.

> > Why must main() be in a library? It seems a trivial matter to fix.
> The real issue is that there's no 'main()' in library, as shown below:
>
> ghost_at_wind:~/Work/Boost/boost-rc/stage/lib$ readelf --symbols
> libboost_unit_test_framework-gcc40-d.so | grep main 871: 00074a43 17
> OBJECT WEAK DEFAULT 12 _ZTSSt12domain_error 1253: 0007ed68 12
> OBJECT WEAK DEFAULT 22 _ZTISt12domain_error 165: 00000000 0 FILE
> LOCAL DEFAULT ABS unit_test_main.cpp 259: 0007ed98 4 OBJECT LOCAL
> HIDDEN 22 DW.ref._ZTISt12domain_err 1128: 00074a43 17 OBJECT WEAK
> DEFAULT 12 _ZTSSt12domain_error 1510: 0007ed68 12 OBJECT WEAK
> DEFAULT 22 _ZTISt12domain_error
>
> When both static and shared libraries are present, gcc picks shared
> on most platforms of note. Since shared library lacks 'main', you get
> linker error.

Right.

> I believe this is intentional change made in Boost.Test for 1.34, in the
> interest of making Linux (where 'main' can be in shared library) and
> Windows (where 'main' cannot be in shared library), uniform.

Yes, that was the intention

> However, you'd need to ask Gennadiy how to your tests work now.

Just #define BOOST_TEST_DYN_LINK

The autotest code then creates a main for you.

Taking a look at libs/test/build/Jamfile.v2 reveals
    : usage-requirements
                   <define>BOOST_TEST_NO_AUTO_LINK=1
                   <link>shared:<define>BOOST_TEST_DYN_LINK=1

which Boost.Build applies automagically ;-))

Yours,

Jürgen

-- 
* Dipl.-Math. Jürgen Hunold       ! Ingenieurgesellschaft für 
* voice: ++49 511 262926 57       ! Verkehrs- und Eisenbahnwesen mbH  
* fax  : ++49 511 262926 99       ! Lister Straße 15
* juergen.hunold_at_[hidden]        ! www.ivembh.de
* 
* Geschäftsführer:                ! Sitz des Unternehmens: Hannover
* Prof. Dr.-Ing. Thomas Siefer    ! Amtsgericht Hannover, HRB 56965
* PD Dr.-Ing. Alfons Radtke       !

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk