
Dear boosters, As far as I've heard a while back, the only reason [thread] library cannot be built as a static library was because of TSS. That to me (and to others as I've seen) seems quite a show-stopper - in a lot of apps I don't use the [thread] lib just because of this. Most of my multi-threaded applications (around 95%) and as I know a lot of other multi-threaded apps. don't need TSS. Even if they do, usually they don't need advanced clean-up code (reason for why [thread] was required to be a DLL). ***Most*** of the time, any allocated TSS objects can be let to leak resources (which they hardly have - mostly IMHO some small amount of allocated memory). The above make me think that we really should enable [thread] to be a static library again ;). It should be documented in the docs that the static version of the [thread] runtime will leak TSS objects, and users can choose whether they will use [thread] as a DLL or as a runtime static lib. What do others think? As a side-note, allowing the [thread] lib to be a static lib is quite simple (please you gurus out there, correct me if I'm wrong). In fact, here's the patch. (note: config.hpp = boost/thread/detail/config.hpp, and I did not modify the jamfile.V2, since I can't test it) Best, John // Copyright (C) 2001-2003 // William E. Kempf // // Permission to use, copy, modify, distribute and sell this software // and its documentation for any purpose is hereby granted without fee, // provided that the above copyright notice appear in all copies and // that both that copyright notice and this permission notice appear // in supporting documentation. William E. Kempf makes no representations // about the suitability of this software for any purpose. // It is provided "as is" without express or implied warranty. #ifndef BOOST_THREAD_CONFIG_WEK01032003_HPP #define BOOST_THREAD_CONFIG_WEK01032003_HPP #include <boost/config.hpp> // insist on threading support being available: #include <boost/config/requires_threads.hpp> #if defined(BOOST_HAS_WINTHREADS) # if defined(BOOST_THREAD_BUILD_DLL) # define BOOST_THREAD_DECL __declspec(dllexport) # elif defined(BOOST_DYN_LINK) // john.torjo # define BOOST_THREAD_DECL __declspec(dllimport) # else # define BOOST_THREAD_DECL // linking to library # endif #else # define BOOST_THREAD_DECL #endif // BOOST_HAS_WINTHREADS // john.torjo /* // // Automatically link to the correct build variant where possible. // #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_THREAD_NO_LIB) && !defined(BOOST_THREAD_BUILD_DLL) // // Set the name of our library, this will get undef'ed by auto_link.hpp // once it's done with it: // #define BOOST_LIB_NAME boost_thread // // If we're importing code from a dll, then tell auto_link.hpp about it: // # define BOOST_DYN_LINK // // And include the header that does the work: // #include <boost/config/auto_link.hpp> #endif // auto-linking disabled */ #endif // BOOST_THREAD_CONFIG_WEK1032003_HPP # Copyright (C) 2001-2003 # William E. Kempf # # Permission to use, copy, modify, distribute and sell this software # and its documentation for any purpose is hereby granted without fee, # provided that the above copyright notice appear in all copies and # that both that copyright notice and this permission notice appear # in supporting documentation. William E. Kempf makes no representations # about the suitability of this software for any purpose. # It is provided "as is" without express or implied warranty. # # Boost.Threads build Jamfile # # Additional configuration variables used: # 1. PTW32 may be used on Win32 platforms to specify that the pthreads-win32 # library should be used instead of "native" threads. This feature is # mostly used for testing and it's generally recommended you use the # native threading libraries instead. PTW32 should be set to be a list # of two strings, the first specifying the installation path of the # pthreads-win32 library and the second specifying which library # variant to link against (see the pthreads-win32 documentation). # Example: jam -sPTW32="c:\pthreads-win32 pthreadVCE.lib" # Declare the location of this subproject relative to the root. subproject libs/thread/build ; # Include threads.jam for Boost.Threads global build information. # This greatly simplifies the Jam code needed to configure the build # for the various Win32 build types. import ./threads ; { template thread_libs ## sources ## : <template>thread_base ## requirements ## : <sysinclude>$(BOOST_ROOT) ## default build ## : ; # Base names of the source files for libboost_thread. CPP_SOURCES = condition mutex recursive_mutex thread tss xtime once exceptions barrier threadmon ; lib boost_thread : <template>thread_libs ../src/$(CPP_SOURCES).cpp : <runtime-link>static # the common names rule ensures that the library will # be named according to the rules used by the install # and auto-link features: common-variant-tag ; dll boost_thread : <template>thread_libs ../src/$(CPP_SOURCES).cpp : <define>BOOST_THREAD_BUILD_DLL=1 <runtime-link>dynamic # the common names rule ensures that the library will # be named according to the rules used by the install # and auto-link features: common-variant-tag ; stage bin-stage : <dll>boost_thread <lib>boost_thread #: <tag><debug>"d" : debug release ; install thread lib : <dll>boost_thread <lib>boost_thread ; }