This bug exists at msvc-6.0 and msvc-7.1 when precompiled headers is used. It is *not* exits at msvc-8.0 at all. I have no msvc-7.0 so I suppose it behavior is similar to msvc-7.1.
Also I have following linker error at msvc-6.0 when I have solved previous problem:
filemain.obj : error LNK2005: "bool boost::test_tools::`anonymous namespace'::dummy_cond" (?dummy_cond@?%..\..\boost/test/unit_test_log.hpp1238016409@test_tools@boost@@3_NA) already defined in pch.obj

This patches should fix both problems:
==========
--- boost/boost/test/utils/trivial_singleton.hpp    2006-01-01 19:29:38.000000000 +0200
+++ boost/boost/test/utils/trivial_singleton.hpp.patched    2007-05-27 20:00:15.031250000 +0300
@@ -55,6 +55,10 @@
 #define BOOST_TEST_SINGLETON_INST( inst ) \
 static BOOST_JOIN( inst, _t)& inst = BOOST_JOIN (inst, _t)::instance();
 
+#elif BOOST_WORKAROUND(BOOST_MSVC, < 1400)
+#define BOOST_TEST_SINGLETON_INST( inst ) \
+namespace { static BOOST_JOIN( inst, _t)& inst = BOOST_JOIN( inst, _t)::instance(); }
+
 #else
 
 #define BOOST_TEST_SINGLETON_INST( inst ) \
==========
--- boost/boost/test/test_tools.hpp.orig.bak    2007-02-22 19:57:30.000000000 +0200
+++ boost/boost/test/test_tools.hpp    2007-05-27 18:53:26.718750000 +0300
@@ -259,8 +259,16 @@
 
 typedef unit_test::const_string      const_string;
 
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
+
+static dummy_cond = false;
+
+#else
+
 namespace { bool dummy_cond = false; }
 
+#endif
+
 namespace tt_detail {
 
 // ************************************************************************** //
==========

Following command line options and files I have used to write and test patches.
bjam --toolset=msvc-6.0 --without-python debug threading=multi link=static runtime-link=shared
bjam --toolset=msvc-7.1 --without-python debug threading=multi link=static runtime-link=shared
bjam --toolset=msvc-8.0 --without-python debug threading=multi link=static runtime-link=shared

==========
# Jamfile.v2
cpp-pch pch : stdafx.h ;
exe filemain : filemain.cpp file1.cpp stdafx.cpp pch ;
==========
// stdafx.h
#ifndef STDAFX_H
#define STDAFX_H
#include <boost/test/unit_test.hpp>
#endif
==========
// stdafx.cpp
#include "stdafx.h"
#include <boost/test/included/unit_test.hpp>
==========
// file1.cpp
#include "stdafx.h"
BOOST_AUTO_TEST_CASE( test2 )
{
    BOOST_CHECK( 2 == 3 );
}
==========
// filemain.cpp
#include "stdafx.h"
BOOST_AUTO_TEST_CASE( test1 )
{
    BOOST_CHECK( 2 == 1 );
}
#ifndef BOOST_BUILD_PCH_ENABLED
#error Precompiled headers is not enabled
#endif
::boost::unit_test::test_suite*
init_unit_test_suite( int, char* [] )
{
    return 0;
}
==========

I think it would be nice to include tests for precompiled headers in regression tests of Boost.Test library.

Thank you!

Gennadiy Rozental wrote:
"Kolya" <wxkolya@gmail.com> wrote in message 
news:1f5259800705230242hb812523mc864b34c6d35e145@mail.gmail.com...
Hi, All!

I am using Boost.Test library in my own application and I have included 
boost/test/unit_test.hpp in many my cpp-files.
When I used boost version 1.33.1 all works fine. But in version 1.34 I 
have following compiler error:

file1.obj : error LNK2005: "class unit_test_log_t::boost::unit_test_log_t 
& boost::unit_test::`anonymous namespace'::unit_test_log" 
(?unit_test_log@?
A0xa35d3712@unit_test@boost@@3AAVunit_test_log_t@23 @A) already defined in 
file2.obj
    

Looks liek clear compiler bug. Anounimus namespace is used specifically to 
avoid duplicate symbols.

  
After including boost/test/unit_test.hpp class unit_test_log has multiple 
instances.
See boost/test/unit_test_log.hpp for details:

BOOST_TEST_SINGLETON_INST( unit_test_log )

It means that following code will be included in many cpp-files!

namespace { unit_test_log_t & inst = unit_test_log_t::instance(); }
    

Try adding static. Though it's like saying the same twice.

namespace { static unit_test_log_t & inst = unit_test_log_t::instance(); }