Problem with <boost/test/unit_test.hpp> in precompiled header.

Hi. I'd like a little guidance regarding the use of <boost/test/unit_test.hpp> please. I'm using mingw--gcc-3.4.5 with CodeBlocks 8.02. I'm dynamically linking to boost_unit_test_framework-mgw34-d-1_36.dll via boost_unit_test_framework-mgw34-d-1_36.lib. I have BOOST_TEST_DYN_LINK defined and I've worked out that I need to have #define BOOST_TEST_MODULE <whatever> defined in one source file prior to #include <boost/test/unit_test.hpp>. That's all good so far and the following example compiles and runs. ------------------------ // Main.cpp #define BOOST_TEST_MODULE Main #include <boost/test/unit_test.hpp> ------------------------ // Test1.cpp #include <boost/test/unit_test.hpp> BOOST_AUTO_TEST_CASE(test1) { BOOST_CHECK(true); } ------------------------ // Test2.cpp #include <boost/test/unit_test.hpp> BOOST_AUTO_TEST_CASE(test2) { BOOST_CHECK(true); } ------------------------ My problem arises when I try to include <boost/test/unit_test.hpp> in a precompiled header. ------------------------ // Pch.h #ifndef PCH_H_INCLUDED #define PCH_H_INCLUDED // Boost headers. #include <boost/test/unit_test.hpp> #endif // PCH_H_INCLUDED ------------------------ // Main.cpp #define BOOST_TEST_MODULE Main #include <boost/test/unit_test.hpp> ------------------------ // Test1.cpp #include "Pch.h" BOOST_AUTO_TEST_CASE(test1) { BOOST_CHECK(true); } ------------------------ // Test2.cpp #include "Pch.h" BOOST_AUTO_TEST_CASE(test2) { BOOST_CHECK(true); } ------------------------ The compiler is exiting with no errors but no output binary is produced. The build log reports: Info: resolving vtable for boost::unit_test::unit_test_log_tby linking to __imp___ZTVN5boost9unit_test15unit_test_log_tE (auto-import) obj\Debug\Mnf\Mnf.EventTest.o: In function `ZN5boost6detail17sp_counted_impl_pINS_9unit_test9ut_detail16callback0_impl_tINS3_6unusedEPFvvEEEED0Ev': F:/My Documents/Development/Libraries/boost_1_36_0/boost/detail/sp_counted_base_gcc_x86.hpp:(.bss+0x0): multiple definition of `boost::unit_test::(anonymous namespace)::unit_test_log' obj\Debug\Mnf\Mnf.BoostFunctionBindTest.o:F:/My Documents/Development/Libraries/boost_1_36_0/boost/detail/sp_counted_base_gcc_x86.hpp:(.bss+0x0): first defined here obj\Debug\Mnf\Mnf.EventTest.o: In function `ZN5boost6detail17sp_counted_impl_pINS_9unit_test9ut_detail16callback0_impl_tINS3_6unusedEPFvvEEEED0Ev': F:/My Documents/Development/Libraries/boost_1_36_0/boost/detail/sp_counted_base_gcc_x86.hpp:(.bss+0x4): multiple definition of `boost::test_tools::(anonymous namespace)::dummy_cond' obj\Debug\Mnf\Mnf.BoostFunctionBindTest.o:F:/My Documents/Development/Libraries/boost_1_36_0/boost/detail/sp_counted_base_gcc_x86.hpp:(.bss+0x4): first defined here obj\Debug\Pch.o: In function `ZN5boost9unit_test13test_observer12test_abortedEv': F:/My Documents/Development/Libraries/boost_1_36_0/boost/test/test_observer.hpp:(.bss+0x0): multiple definition of `boost::unit_test::(anonymous namespace)::unit_test_log' obj\Debug\Mnf\Mnf.BoostFunctionBindTest.o:F:/My Documents/Development/Libraries/boost_1_36_0/boost/detail/sp_counted_base_gcc_x86.hpp:(.bss+0x0): first defined here obj\Debug\Pch.o: In function `ZN5boost9unit_test13test_observer12test_abortedEv': F:/My Documents/Development/Libraries/boost_1_36_0/boost/test/test_observer.hpp:(.bss+0x4): multiple definition of `boost::test_tools::(anonymous namespace)::dummy_cond' obj\Debug\Mnf\Mnf.BoostFunctionBindTest.o:F:/My Documents/Development/Libraries/boost_1_36_0/boost/detail/sp_counted_base_gcc_x86.hpp:(.bss+0x4): first defined here I do not understand why the header file <boost/test/unit_test.hpp> objects to being included via a precompiled header file in this way. The following simple case also works fine. ------------------------ // Pch.h #ifndef PCH_H_INCLUDED #define PCH_H_INCLUDED // Boost headers. #define BOOST_TEST_MODULE Main #include <boost/test/unit_test.hpp> #endif // PCH_H_INCLUDED ------------------------ // Main.cpp #include "Pch.h" BOOST_AUTO_TEST_CASE(test1) { BOOST_CHECK(true); } ------------------------ I'll start having a look at the Boost source and see if I can work out what I'm doing wrong, but if anyone can see a problem with what I'm trying to do here I'd be grateful if they could point it out for me. Thanks Neutrino. -- View this message in context: http://www.nabble.com/Problem-with-%3Cboost-test-unit_test.hpp%3E-in-precomp... Sent from the Boost - Users mailing list archive at Nabble.com.

Neutrino wrote:
Hi.
I'd like a little guidance regarding the use of <boost/test/unit_test.hpp>
I am not really an expect on precompiled headers usage, but I believe your problem might be caused by usage of unnamed namespace in Boost.Test headers. Usually it can be worked around by adding extra static. I'll look into fixing this. Would you mind opening a ticket for this? Gennadiy
participants (2)
-
Gennadiy Rozental
-
Neutrino