--- libs/serialization/src/basic_text_iprimitive.cpp.orig
+++ libs/serialization/src/basic_text_iprimitive.cpp
@@ -12,7 +12,9 @@
 #  pragma warning (disable : 4786) // too long name, harmless warning
 #endif
 
+#pragma GCC visibility push(default)
 #include <istream>
+#pragma GCC visibility pop
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
@@ -23,7 +25,7 @@ namespace boost {
 namespace archive {
 
 // explicitly instantiate for this type of text stream
-template class basic_text_iprimitive<std::istream> ;
+template class BOOST_SYMBOL_VISIBLE basic_text_iprimitive<std::istream> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/basic_text_oprimitive.cpp.orig
+++ libs/serialization/src/basic_text_oprimitive.cpp
@@ -12,7 +12,9 @@
 #  pragma warning (disable : 4786) // too long name, harmless warning
 #endif
 
+#pragma GCC visibility push(default)
 #include <ostream>
+#pragma GCC visibility pop
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
@@ -23,7 +25,7 @@ namespace boost {
 namespace archive {
 
 // explicitly instantiate for this type of text stream
-template class basic_text_oprimitive<std::ostream> ;
+template class BOOST_SYMBOL_VISIBLE basic_text_oprimitive<std::ostream> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/basic_text_wiprimitive.cpp.orig
+++ libs/serialization/src/basic_text_wiprimitive.cpp
@@ -8,7 +8,9 @@
 
 //  See http://www.boost.org for updates, documentation, and revision history.
 
+#pragma GCC visibility push(default)
 #include <istream>
+#pragma GCC visibility pop
 
 #include <boost/config.hpp>
 
@@ -28,7 +30,7 @@
 namespace boost {
 namespace archive {
 
-template class basic_text_iprimitive<std::wistream> ;
+template class BOOST_SYMBOL_VISIBLE basic_text_iprimitive<std::wistream> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/basic_text_woprimitive.cpp.orig
+++ libs/serialization/src/basic_text_woprimitive.cpp
@@ -8,7 +8,9 @@
 
 //  See http://www.boost.org for updates, documentation, and revision history.
 
+#pragma GCC visibility push(default)
 #include <ostream>
+#pragma GCC visibility pop
 
 #include <boost/config.hpp>
 
@@ -28,7 +30,7 @@
 namespace boost {
 namespace archive {
 
-template class basic_text_oprimitive<std::wostream> ;
+template class BOOST_SYMBOL_VISIBLE basic_text_oprimitive<std::wostream> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/basic_xml_grammar.ipp.orig
+++ libs/serialization/src/basic_xml_grammar.ipp
@@ -12,7 +12,9 @@
 #  pragma warning (disable : 4786) // too long name, harmless warning
 #endif
 
+#pragma GCC visibility push(default)
 #include <istream>
+#pragma GCC visibility pop
 #include <algorithm>
 #include <boost/config.hpp> // typename
 
--- libs/serialization/src/binary_iarchive.cpp.orig
+++ libs/serialization/src/binary_iarchive.cpp
@@ -8,11 +8,15 @@
 
 //  See http://www.boost.org for updates, documentation, and revision history.
 
+#pragma GCC visibility push(default)
 #include <istream>
+#pragma GCC visibility pop
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/binary_iarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 #include <boost/archive/impl/archive_serializer_map.ipp>
@@ -23,14 +27,14 @@ namespace boost {
 namespace archive {
 
 // explicitly instantiate for this type of stream
-template class detail::archive_serializer_map<binary_iarchive>;
-template class basic_binary_iprimitive<
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<binary_iarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_binary_iprimitive<
     binary_iarchive,
     std::istream::char_type, 
     std::istream::traits_type
 >;
-template class basic_binary_iarchive<binary_iarchive> ;
-template class binary_iarchive_impl<
+template class BOOST_SYMBOL_VISIBLE basic_binary_iarchive<binary_iarchive> ;
+template class BOOST_SYMBOL_VISIBLE binary_iarchive_impl<
     binary_iarchive, 
     std::istream::char_type, 
     std::istream::traits_type
--- libs/serialization/src/binary_oarchive.cpp.orig
+++ libs/serialization/src/binary_oarchive.cpp
@@ -8,11 +8,15 @@
 
 //  See http://www.boost.org for updates, documentation, and revision history.
 
+#pragma GCC visibility push(default)
 #include <ostream>
+#pragma GCC visibility pop
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/binary_oarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of binary stream
@@ -23,14 +27,14 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<binary_oarchive>;
-template class basic_binary_oprimitive<
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<binary_oarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_binary_oprimitive<
     binary_oarchive, 
     std::ostream::char_type, 
     std::ostream::traits_type
 >;
-template class basic_binary_oarchive<binary_oarchive> ;
-template class binary_oarchive_impl<
+template class BOOST_SYMBOL_VISIBLE basic_binary_oarchive<binary_oarchive> ;
+template class BOOST_SYMBOL_VISIBLE binary_oarchive_impl<
     binary_oarchive, 
     std::ostream::char_type, 
     std::ostream::traits_type
--- libs/serialization/src/binary_wiarchive.cpp.orig
+++ libs/serialization/src/binary_wiarchive.cpp
@@ -15,7 +15,9 @@
 #else
 
 #define BOOST_WARCHIVE_SOURCE
+#pragma GCC visibility push(default)
 #include <boost/archive/binary_wiarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of text stream
@@ -27,14 +29,14 @@ namespace boost {
 namespace archive {
 
 // explicitly instantiate for this type of text stream
-template class detail::archive_serializer_map<binary_wiarchive>;
-template class basic_binary_iprimitive<
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<binary_wiarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_binary_iprimitive<
     binary_wiarchive,
     wchar_t, 
     std::char_traits<wchar_t> 
 >;
-template class basic_binary_iarchive<binary_wiarchive> ;
-template class binary_iarchive_impl<
+template class BOOST_SYMBOL_VISIBLE basic_binary_iarchive<binary_wiarchive> ;
+template class BOOST_SYMBOL_VISIBLE binary_iarchive_impl<
     binary_wiarchive, 
     wchar_t, 
     std::char_traits<wchar_t> 
--- libs/serialization/src/binary_woarchive.cpp.orig
+++ libs/serialization/src/binary_woarchive.cpp
@@ -15,7 +15,9 @@
 #else
 
 #define BOOST_WARCHIVE_SOURCE
+#pragma GCC visibility push(default)
 #include <boost/archive/binary_woarchive.hpp>
+#pragma GCC visibility pop
 
 // explicitly instantiate for this type of text stream
 #include <boost/archive/impl/archive_serializer_map.ipp>
@@ -25,14 +27,14 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<binary_woarchive>;
-template class basic_binary_oprimitive<
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<binary_woarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_binary_oprimitive<
     binary_woarchive, 
     wchar_t, 
     std::char_traits<wchar_t> 
 >;
-template class basic_binary_oarchive<binary_woarchive> ;
-template class binary_oarchive_impl<
+template class BOOST_SYMBOL_VISIBLE basic_binary_oarchive<binary_woarchive> ;
+template class BOOST_SYMBOL_VISIBLE binary_oarchive_impl<
     binary_woarchive, 
     wchar_t, 
     std::char_traits<wchar_t> 
--- libs/serialization/src/polymorphic_iarchive.cpp.orig
+++ libs/serialization/src/polymorphic_iarchive.cpp
@@ -17,13 +17,15 @@
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 #include <boost/archive/impl/archive_serializer_map.ipp>
+#pragma GCC visibility push(default)
 #include <boost/archive/polymorphic_iarchive.hpp>
+#pragma GCC visibility pop
 
 namespace boost {
 namespace archive {
 namespace detail {
 
-template class archive_serializer_map<polymorphic_iarchive>;
+template class BOOST_SYMBOL_VISIBLE archive_serializer_map<polymorphic_iarchive>;
 
 } // detail
 } // archive
--- libs/serialization/src/polymorphic_oarchive.cpp.orig
+++ libs/serialization/src/polymorphic_oarchive.cpp
@@ -17,13 +17,15 @@
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 #include <boost/archive/impl/archive_serializer_map.ipp>
+#pragma GCC visibility push(default)
 #include <boost/archive/polymorphic_oarchive.hpp>
+#pragma GCC visibility pop
 
 namespace boost {
 namespace archive {
 namespace detail {
 
-template class archive_serializer_map<polymorphic_oarchive>;
+template class BOOST_SYMBOL_VISIBLE archive_serializer_map<polymorphic_oarchive>;
 
 } // detail
 } // archive
--- libs/serialization/src/text_iarchive.cpp.orig
+++ libs/serialization/src/text_iarchive.cpp
@@ -14,7 +14,9 @@
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/text_iarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of text stream
@@ -25,9 +27,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<text_iarchive>;
-template class basic_text_iarchive<text_iarchive> ;
-template class text_iarchive_impl<text_iarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<text_iarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_text_iarchive<text_iarchive> ;
+template class BOOST_SYMBOL_VISIBLE text_iarchive_impl<text_iarchive> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/text_oarchive.cpp.orig
+++ libs/serialization/src/text_oarchive.cpp
@@ -14,7 +14,9 @@
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/text_oarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of text stream
@@ -26,9 +28,9 @@ namespace boost {
 namespace archive {
 
 //template class basic_text_oprimitive<std::ostream> ;
-template class detail::archive_serializer_map<text_oarchive>;
-template class basic_text_oarchive<text_oarchive> ;
-template class text_oarchive_impl<text_oarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<text_oarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_text_oarchive<text_oarchive> ;
+template class BOOST_SYMBOL_VISIBLE text_oarchive_impl<text_oarchive> ;
 
 } // namespace serialization
 } // namespace boost
--- libs/serialization/src/text_wiarchive.cpp.orig
+++ libs/serialization/src/text_wiarchive.cpp
@@ -16,7 +16,9 @@
 
 #define BOOST_WARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/text_wiarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of text stream
@@ -27,9 +29,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<text_wiarchive>;
-template class basic_text_iarchive<text_wiarchive> ;
-template class text_wiarchive_impl<text_wiarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<text_wiarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_text_iarchive<text_wiarchive> ;
+template class BOOST_SYMBOL_VISIBLE text_wiarchive_impl<text_wiarchive> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/text_woarchive.cpp.orig
+++ libs/serialization/src/text_woarchive.cpp
@@ -15,7 +15,9 @@
 
 #define BOOST_WARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/text_woarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of text stream
@@ -26,9 +28,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<text_woarchive>;
-template class basic_text_oarchive<text_woarchive> ;
-template class text_woarchive_impl<text_woarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<text_woarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_text_oarchive<text_woarchive> ;
+template class BOOST_SYMBOL_VISIBLE text_woarchive_impl<text_woarchive> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/xml_grammar.cpp.orig
+++ libs/serialization/src/xml_grammar.cpp
@@ -16,7 +16,9 @@
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/impl/basic_xml_grammar.hpp>
+#pragma GCC visibility pop
 
 using namespace boost::spirit::classic;
 
@@ -67,7 +69,7 @@ namespace boost {
 namespace archive {
 
 // explicit instantiation of xml for 8 bit characters
-template class basic_xml_grammar<char>;
+template class BOOST_SYMBOL_VISIBLE basic_xml_grammar<char>;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/xml_iarchive.cpp.orig
+++ libs/serialization/src/xml_iarchive.cpp
@@ -14,7 +14,9 @@
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/xml_iarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of xml stream
@@ -25,9 +27,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<xml_iarchive>;
-template class basic_xml_iarchive<xml_iarchive> ;
-template class xml_iarchive_impl<xml_iarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<xml_iarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_xml_iarchive<xml_iarchive> ;
+template class BOOST_SYMBOL_VISIBLE xml_iarchive_impl<xml_iarchive> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/xml_oarchive.cpp.orig
+++ libs/serialization/src/xml_oarchive.cpp
@@ -14,7 +14,9 @@
 
 #define BOOST_ARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/xml_oarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of xml stream
@@ -25,9 +27,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<xml_oarchive>;
-template class basic_xml_oarchive<xml_oarchive> ;
-template class xml_oarchive_impl<xml_oarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<xml_oarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_xml_oarchive<xml_oarchive> ;
+template class BOOST_SYMBOL_VISIBLE xml_oarchive_impl<xml_oarchive> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/xml_wgrammar.cpp.orig
+++ libs/serialization/src/xml_wgrammar.cpp
@@ -16,7 +16,9 @@
 
 #define BOOST_WARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/impl/basic_xml_grammar.hpp>
+#pragma GCC visibility pop
 
 using namespace boost::spirit::classic;
 
@@ -149,7 +151,7 @@ namespace boost {
 namespace archive {
 
 // explicit instantiation of xml for wide characters
-template class basic_xml_grammar<wchar_t>;
+template class BOOST_SYMBOL_VISIBLE basic_xml_grammar<wchar_t>;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/xml_wiarchive.cpp.orig
+++ libs/serialization/src/xml_wiarchive.cpp
@@ -19,7 +19,9 @@
 
 #define BOOST_WARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/xml_wiarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of xml stream
@@ -30,9 +32,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<xml_wiarchive>;
-template class basic_xml_iarchive<xml_wiarchive> ;
-template class xml_wiarchive_impl<xml_wiarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<xml_wiarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_xml_iarchive<xml_wiarchive> ;
+template class BOOST_SYMBOL_VISIBLE xml_wiarchive_impl<xml_wiarchive> ;
 
 } // namespace archive
 } // namespace boost
--- libs/serialization/src/xml_woarchive.cpp.orig
+++ libs/serialization/src/xml_woarchive.cpp
@@ -19,7 +19,9 @@
 
 #define BOOST_WARCHIVE_SOURCE
 #include <boost/serialization/config.hpp>
+#pragma GCC visibility push(default)
 #include <boost/archive/xml_woarchive.hpp>
+#pragma GCC visibility pop
 #include <boost/archive/detail/archive_serializer_map.hpp>
 
 // explicitly instantiate for this type of text stream
@@ -30,9 +32,9 @@
 namespace boost {
 namespace archive {
 
-template class detail::archive_serializer_map<xml_woarchive>;
-template class basic_xml_oarchive<xml_woarchive> ;
-template class xml_woarchive_impl<xml_woarchive> ;
+template class BOOST_SYMBOL_VISIBLE detail::archive_serializer_map<xml_woarchive>;
+template class BOOST_SYMBOL_VISIBLE basic_xml_oarchive<xml_woarchive> ;
+template class BOOST_SYMBOL_VISIBLE xml_woarchive_impl<xml_woarchive> ;
 
 } // namespace archive
 } // namespace boost