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
"Kolya"
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(); }