diff --git a/Common/Core/vtkABINamespace.h.in b/Common/Core/vtkABINamespace.h.in
index cbfe9ea40d8dcd7ee7ac1decd55a1ba49eed9c42..9e69e5e59d1bd19aefa71ae5f5a048484f4103ee 100644
--- a/Common/Core/vtkABINamespace.h.in
+++ b/Common/Core/vtkABINamespace.h.in
@@ -5,8 +5,13 @@
 
 #cmakedefine01 VTK_HAS_ABI_NAMESPACE
 
-#ifndef VTK_NO_ABI_NAMESPACE
+#if !defined(VTK_NO_ABI_NAMESPACE) && VTK_HAS_ABI_NAMESPACE
+// NOTE: VTK_ABI_NAMESPACE_NAME is only characters [a-zA-Z0-9_]+, so it is safe
+// to use in the MANGLE macro beneath.  We use the VTK_ABI_NAMESPACE_MANGLE to
+// mangle C symbols coming from VTK (e.g., extern "C" { void some_func(); }).
 #define VTK_ABI_NAMESPACE_NAME @VTK_ABI_NAMESPACE_NAME@
+#define VTK_ABI_NAMESPACE_MANGLE(x) @VTK_ABI_NAMESPACE_NAME@_##x
+
 #if defined(__cplusplus)
 #define VTK_ABI_NAMESPACE_BEGIN @VTK_ABI_NAMESPACE_BEGIN@
 #define VTK_ABI_NAMESPACE_END @VTK_ABI_NAMESPACE_END@
@@ -14,6 +19,13 @@
 #define VTK_ABI_NAMESPACE_BEGIN
 #define VTK_ABI_NAMESPACE_END
 #endif
+
+#else
+
+#define VTK_ABI_NAMESPACE_MANGLE(x) x
+#define VTK_ABI_NAMESPACE_BEGIN
+#define VTK_ABI_NAMESPACE_END
+
 #endif // VTK_NO_ABI_NAMESPACE
 
 #endif // vtkABINamespace_h
diff --git a/Common/Core/vtkFloatingPointExceptions.cxx b/Common/Core/vtkFloatingPointExceptions.cxx
index 78e79b53aedeb4f8fcb1b75d61871266d9d5e066..dc19319e2cade5024d69883599c82e82df4e2932 100644
--- a/Common/Core/vtkFloatingPointExceptions.cxx
+++ b/Common/Core/vtkFloatingPointExceptions.cxx
@@ -17,11 +17,8 @@
 #endif
 
 #if defined(VTK_USE_FENV)
-//------------------------------------------------------------------------------
-// Signal handler for floating point exceptions in anonymous namespace
-namespace
-{
 
+#define signal_handler VTK_ABI_NAMESPACE_MANGLE(signal_handler)
 extern "C" void signal_handler(int signal)
 {
   // NOLINTNEXTLINE(bugprone-signal-handler)
@@ -31,7 +28,6 @@ extern "C" void signal_handler(int signal)
   abort();
 }
 
-} // End anonymous namespace
 #endif
 
 //------------------------------------------------------------------------------
diff --git a/Common/Core/vtkVersion.cxx b/Common/Core/vtkVersion.cxx
index eabe2d870a457e39d59b91105abd379663e203f3..872b19c200c2383c2ecdc84348e8eb46ea444c10 100644
--- a/Common/Core/vtkVersion.cxx
+++ b/Common/Core/vtkVersion.cxx
@@ -19,8 +19,9 @@ const char* vtkVersion::GetVTKVersionFull()
   return VTK_VERSION_FULL;
 }
 
-const char* GetVTKVersion()
+VTK_ABI_NAMESPACE_END
+
+extern "C"
 {
-  return vtkVersion::GetVTKVersion();
+  const char* VTK_ABI_NAMESPACE_MANGLE(GetVTKVersion)() { return vtkVersion::GetVTKVersion(); }
 }
-VTK_ABI_NAMESPACE_END
diff --git a/Common/Core/vtkVersion.h b/Common/Core/vtkVersion.h
index 279d5dad26f204a435835e5973aa8105b572f097..75b1acac102823785581c9b2b8cdd4675139f351 100644
--- a/Common/Core/vtkVersion.h
+++ b/Common/Core/vtkVersion.h
@@ -19,6 +19,8 @@
 #include "vtkObject.h"
 #include "vtkVersionMacros.h" // For version macros
 
+#define GetVTKVersion VTK_ABI_NAMESPACE_MANGLE(GetVTKVersion)
+
 VTK_ABI_NAMESPACE_BEGIN
 class VTKCOMMONCORE_EXPORT vtkVersion : public vtkObject
 {
@@ -48,10 +50,11 @@ private:
   void operator=(const vtkVersion&) = delete;
 };
 
+VTK_ABI_NAMESPACE_END
+
 extern "C"
 {
   VTKCOMMONCORE_EXPORT const char* GetVTKVersion();
 }
 
-VTK_ABI_NAMESPACE_END
 #endif
diff --git a/Common/DataModel/vtkAbstractCellArray.cxx b/Common/DataModel/vtkAbstractCellArray.cxx
index d83cf9106686e54e205b71af26f27e6f37c4a874..2008372a4c90ca47c0c3a31c65f27a89f57e4f1d 100644
--- a/Common/DataModel/vtkAbstractCellArray.cxx
+++ b/Common/DataModel/vtkAbstractCellArray.cxx
@@ -5,6 +5,7 @@
 #include "vtkIdList.h"
 
 VTK_ABI_NAMESPACE_BEGIN
+
 //------------------------------------------------------------------------------
 vtkAbstractCellArray::vtkAbstractCellArray() = default;
 
@@ -23,3 +24,5 @@ void vtkAbstractCellArray::GetCellAtId(vtkIdType cellId, vtkIdType& cellSize,
 {
   this->GetCellAtId(cellId, cellSize, cellPoints, this->TempCell);
 }
+
+VTK_ABI_NAMESPACE_END
diff --git a/Common/Misc/vtkResourceFileLocator.h b/Common/Misc/vtkResourceFileLocator.h
index 650ba00d75e115603ecea1da0f1a06dd704c89e2..5b7b50fa669b04ff7b5688d43b12c2d60fbe8e2f 100644
--- a/Common/Misc/vtkResourceFileLocator.h
+++ b/Common/Misc/vtkResourceFileLocator.h
@@ -91,12 +91,20 @@ private:
   int LogVerbosity;
 };
 
+// Wrap the input as an argument, this will force expansion
+// if the input is a macro itself
+#define _vtkGetSymbolNameAsString(x) _vtkGetSymbolNameAsString_I((x))
+// Unwrap the expanded input
+#define _vtkGetSymbolNameAsString_I(x) _vtkGetSymbolNameAsString_II x
+// Stringify the epanded contents
+#define _vtkGetSymbolNameAsString_II(...) #__VA_ARGS__
+
 #if defined(_WIN32) && !defined(__CYGWIN__)
 #define vtkGetLibraryPathForSymbol(function)                                                       \
   vtkResourceFileLocator::GetLibraryPathForSymbolWin32(reinterpret_cast<const void*>(&function))
 #else
 #define vtkGetLibraryPathForSymbol(function)                                                       \
-  vtkResourceFileLocator::GetLibraryPathForSymbolUnix(#function)
+  vtkResourceFileLocator::GetLibraryPathForSymbolUnix(_vtkGetSymbolNameAsString(function))
 #endif
 
 VTK_ABI_NAMESPACE_END
diff --git a/IO/Engys/vtkBTSReader.cxx b/IO/Engys/vtkBTSReader.cxx
index f5b8abd056a016ded27c10231c046e2520c8bdd6..03eebb26bddcb10bc446e274220137ce76fef8a3 100644
--- a/IO/Engys/vtkBTSReader.cxx
+++ b/IO/Engys/vtkBTSReader.cxx
@@ -18,6 +18,8 @@
 #include <sstream>
 #include <string>
 
+VTK_ABI_NAMESPACE_BEGIN
+
 static constexpr char BTS_HEADER[] = "ENGYS binary surface format";
 
 vtkStandardNewMacro(vtkBTSReader);
@@ -407,3 +409,5 @@ vtkResourceStream* vtkBTSReader::GetStream()
 {
   return this->Stream;
 }
+
+VTK_ABI_NAMESPACE_END
diff --git a/IO/XML/vtkXMLWriterC.cxx b/IO/XML/vtkXMLWriterC.cxx
index e45d9c58ca17f7aa1f6dbb005f5e0876ab857d52..12b8f949b8e336cd61af2444380c5b3521c9db0c 100644
--- a/IO/XML/vtkXMLWriterC.cxx
+++ b/IO/XML/vtkXMLWriterC.cxx
@@ -24,16 +24,19 @@
 
 // Function to allocate a vtkDataArray and point it at the given data.
 // The data are not copied.
+#define vtkXMLWriterC_NewDataArray VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_NewDataArray)
 static vtkSmartPointer<vtkDataArray> vtkXMLWriterC_NewDataArray(const char* method,
   const char* name, int dataType, void* data, vtkIdType numTuples, int numComponents);
 
 // Function to allocate a vtkCellArray and point it at the given
 // cells.  The cells are not copied.
+#define vtkXMLWriterC_NewCellArray VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_NewCellArray)
 static vtkSmartPointer<vtkCellArray> vtkXMLWriterC_NewCellArray(
   const char* method, vtkIdType ncells, vtkIdType* cells, vtkIdType cellsSize);
 
 // Function to implement vtkXMLWriterC_SetPointData and
 // vtkXMLWriterC_SetCellData without duplicate code.
+#define vtkXMLWriterC_SetDataInternal VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetDataInternal)
 static void vtkXMLWriterC_SetDataInternal(vtkXMLWriterC* self, const char* name, int dataType,
   void* data, vtkIdType numTuples, int numComponents, const char* role, const char* method,
   int isPoints);
diff --git a/IO/XML/vtkXMLWriterC.h b/IO/XML/vtkXMLWriterC.h
index ab9cb8960204acfb20459ebe29582214b306bda1..28aaad10f2ea1a9feb72cc79a5b9add12d098e4c 100644
--- a/IO/XML/vtkXMLWriterC.h
+++ b/IO/XML/vtkXMLWriterC.h
@@ -21,6 +21,7 @@ extern "C"
    * Create a new instance of vtkXMLWriterC.  Returns the object or nullptr
    * on failure.
    */
+#define vtkXMLWriterC_New VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_New)
   VTKIOXML_EXPORT
   vtkXMLWriterC* vtkXMLWriterC_New(void);
 
@@ -29,6 +30,7 @@ extern "C"
    *
    * This should not be called between Start and Stop calls.
    */
+#define vtkXMLWriterC_Delete VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_Delete)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_Delete(vtkXMLWriterC* self);
 
@@ -39,6 +41,7 @@ extern "C"
    * This must be set before setting geometry or data information can
    * can be set only once per writer object.
    */
+#define vtkXMLWriterC_SetDataObjectType VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetDataObjectType)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetDataObjectType(vtkXMLWriterC* self, int objType);
 
@@ -50,6 +53,7 @@ extern "C"
    *
    * This may be used only after SetDataObjectType has been called.
    */
+#define vtkXMLWriterC_SetDataModeType VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetDataModeType)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetDataModeType(vtkXMLWriterC* self, int datamodetype);
 
@@ -59,6 +63,7 @@ extern "C"
    * This may be used only after SetDataObjectType has been called with
    * a structured data object type.
    */
+#define vtkXMLWriterC_SetExtent VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetExtent)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetExtent(vtkXMLWriterC* self, int extent[6]);
 
@@ -74,6 +79,7 @@ extern "C"
    * not be called before SetDataObjectType or between Start and Stop
    * calls.
    */
+#define vtkXMLWriterC_SetPoints VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetPoints)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetPoints(vtkXMLWriterC* self, int dataType, void* data, vtkIdType numPoints);
 
@@ -83,6 +89,7 @@ extern "C"
    * This may only be used for image data.  It may not be called before
    * SetDataObjectType or between Start and Stop calls.
    */
+#define vtkXMLWriterC_SetOrigin VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetOrigin)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetOrigin(vtkXMLWriterC* self, double origin[3]);
 
@@ -92,6 +99,7 @@ extern "C"
    * This may only be used for image data.  It may not be called before
    * SetDataObjectType or between Start and Stop calls.
    */
+#define vtkXMLWriterC_SetSpacing VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetSpacing)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetSpacing(vtkXMLWriterC* self, double spacing[3]);
 
@@ -107,6 +115,7 @@ extern "C"
    * This may only be used for rectilinear grids.  It may not be called
    * before SetDataObjectType or between Start and Stop calls.
    */
+#define vtkXMLWriterC_SetCoordinates VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetCoordinates)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetCoordinates(
     vtkXMLWriterC* self, int axis, int dataType, void* data, vtkIdType numCoordinates);
@@ -130,6 +139,7 @@ extern "C"
    * types.  It may not be called before SetDataObjectType or between
    * Start and Stop calls.
    */
+#define vtkXMLWriterC_SetCellsWithType VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetCellsWithType)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetCellsWithType(
     vtkXMLWriterC* self, int cellType, vtkIdType ncells, vtkIdType* cells, vtkIdType cellsSize);
@@ -148,6 +158,7 @@ extern "C"
    * not be called before SetDataObjectType or between Start and Stop
    * calls.
    */
+#define vtkXMLWriterC_SetCellsWithTypes VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetCellsWithTypes)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetCellsWithTypes(
     vtkXMLWriterC* self, int* cellTypes, vtkIdType ncells, vtkIdType* cells, vtkIdType cellsSize);
@@ -175,9 +186,12 @@ extern "C"
    * This may be used for all data types.  It may not be called before
    * SetDataObjectType but may be called between Start and Stop calls.
    */
+#define vtkXMLWriterC_SetPointData VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetPointData)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetPointData(vtkXMLWriterC* self, const char* name, int dataType, void* data,
     vtkIdType numTuples, int numComponents, const char* role);
+
+#define vtkXMLWriterC_SetCellData VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetCellData)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetCellData(vtkXMLWriterC* self, const char* name, int dataType, void* data,
     vtkIdType numTuples, int numComponents, const char* role);
@@ -188,6 +202,7 @@ extern "C"
    * This may be used for all data types.  It may not be called before
    * SetDataObjectType or between Start and Stop calls.
    */
+#define vtkXMLWriterC_SetFileName VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetFileName)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetFileName(vtkXMLWriterC* self, const char* fileName);
 
@@ -197,6 +212,7 @@ extern "C"
    *
    * This may only be called after SetFileName and SetDataObjectType.
    */
+#define vtkXMLWriterC_Write VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_Write)
   VTKIOXML_EXPORT
   int vtkXMLWriterC_Write(vtkXMLWriterC* self);
 
@@ -207,6 +223,8 @@ extern "C"
    * This may be used for all data types.  It may not be called before
    * SetDataObjectType or between Start and Stop calls.
    */
+#define vtkXMLWriterC_SetNumberOfTimeSteps                                                         \
+  VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_SetNumberOfTimeSteps)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_SetNumberOfTimeSteps(vtkXMLWriterC* self, int numTimeSteps);
 
@@ -217,6 +235,7 @@ extern "C"
    * SetNumberOfTimeSteps.  It may not be called a second time until
    * after an intervening call to Stop.
    */
+#define vtkXMLWriterC_Start VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_Start)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_Start(vtkXMLWriterC* self);
 
@@ -230,6 +249,7 @@ extern "C"
    * This may only be called after Start has been called.  It should be
    * called NumberOfTimeSteps times before calling Stop.
    */
+#define vtkXMLWriterC_WriteNextTimeStep VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_WriteNextTimeStep)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_WriteNextTimeStep(vtkXMLWriterC* self, double timeValue);
 
@@ -239,6 +259,7 @@ extern "C"
    * This may only be called after Start and NumberOfTimeSteps calls to
    * WriteNextTimeStep.
    */
+#define vtkXMLWriterC_Stop VTK_ABI_NAMESPACE_MANGLE(vtkXMLWriterC_Stop)
   VTKIOXML_EXPORT
   void vtkXMLWriterC_Stop(vtkXMLWriterC* self);
 
diff --git a/Infovis/Boost/vtkVariantBoostSerialization.h b/Infovis/Boost/vtkVariantBoostSerialization.h
index b9828f0546dd9d4b515637e2dabbf7d973ca2be9..59150c74dc618a0a8bdaf0e3a9bc7d08764178ff 100644
--- a/Infovis/Boost/vtkVariantBoostSerialization.h
+++ b/Infovis/Boost/vtkVariantBoostSerialization.h
@@ -31,6 +31,8 @@
 #include <boost/serialization/extended_type_info_no_rtti.hpp>
 #include <boost/serialization/split_free.hpp>
 
+VTK_ABI_NAMESPACE_BEGIN
+
 //----------------------------------------------------------------------------
 // vtkStdString serialization code
 //----------------------------------------------------------------------------
@@ -144,8 +146,12 @@ void load(Archiver& ar, vtkVariant& variant, const unsigned int vtkNotUsed(versi
 #undef VTK_VARIANT_LOAD
 }
 
+VTK_ABI_NAMESPACE_END
+
 BOOST_SERIALIZATION_SPLIT_FREE(vtkVariant)
 
+VTK_ABI_NAMESPACE_BEGIN
+
 //----------------------------------------------------------------------------
 // vtkVariantArray serialization code
 //----------------------------------------------------------------------------
@@ -199,6 +205,8 @@ void load(Archiver& ar, vtkVariantArray& array, const unsigned int vtkNotUsed(ve
   }
 }
 
+VTK_ABI_NAMESPACE_END
+
 BOOST_SERIALIZATION_SPLIT_FREE(vtkVariantArray)
 
 #endif
diff --git a/Rendering/CellGrid/CMakeLists.txt b/Rendering/CellGrid/CMakeLists.txt
index a38ea8e575f0acab30eb38a3c9cd8b3ff27f7970..cfc500855e4b1c82668feeb96b3fed6d230a04c2 100644
--- a/Rendering/CellGrid/CMakeLists.txt
+++ b/Rendering/CellGrid/CMakeLists.txt
@@ -18,7 +18,7 @@ unset(shader_h_files)
 foreach(file IN LISTS shader_files)
   vtk_encode_string(
     INPUT         "${file}"
-    EXPORT_SYMBOL "VTKRENDERINGCELLGRID_EXPORT"
+    EXPORT_SYMBOL "VTKRENDERINGCELLGRID_NO_EXPORT"
     EXPORT_HEADER "vtkRenderingCellGridModule.h"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source
diff --git a/Rendering/LICOpenGL2/CMakeLists.txt b/Rendering/LICOpenGL2/CMakeLists.txt
index 46535c52f509e26fca903560c62d251acce43c5d..84d632c8b607e2a38acd5c94adc3574bf7b9e182 100644
--- a/Rendering/LICOpenGL2/CMakeLists.txt
+++ b/Rendering/LICOpenGL2/CMakeLists.txt
@@ -36,6 +36,8 @@ set(shader_cxx_files)
 foreach (shader_file IN LISTS shader_files)
   vtk_encode_string(
     INPUT         "${shader_file}"
+    EXPORT_HEADER "vtkRenderingLICOpenGL2Module.h"
+    EXPORT_SYMBOL "VTKRENDERINGLICOPENGL2_NO_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source)
   list(APPEND shader_cxx_files ${source})
diff --git a/Rendering/OpenGL2/CMakeLists.txt b/Rendering/OpenGL2/CMakeLists.txt
index 89ae5d1f6a1228200d0b9892e66ac2b3f488fd17..cdbbd3942aa714bffa5ae2c026c939e636856f6b 100644
--- a/Rendering/OpenGL2/CMakeLists.txt
+++ b/Rendering/OpenGL2/CMakeLists.txt
@@ -185,6 +185,8 @@ unset(shader_h_files)
 foreach(file IN LISTS shader_files)
   vtk_encode_string(
     INPUT         "${file}"
+    EXPORT_SYMBOL "VTKRENDERINGOPENGL2_NO_EXPORT"
+    EXPORT_HEADER "vtkRenderingOpenGL2Module.h"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source)
   list(APPEND sources
@@ -212,6 +214,8 @@ vtk_encode_string(
   INPUT "textures/BlueNoiseTexture64x64.jpg"
   HEADER_OUTPUT BlueNoiseTexture64x64_header
   SOURCE_OUTPUT BlueNoiseTexture64x64_source
+  EXPORT_SYMBOL "VTKRENDERINGOPENGL2_NO_EXPORT"
+  EXPORT_HEADER "vtkRenderingOpenGL2Module.h"
   BINARY)
 list(APPEND sources "${BlueNoiseTexture64x64_source}")
 list(APPEND private_headers "${BlueNoiseTexture64x64_header}")
diff --git a/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx b/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx
index 3edf4164153b98054202a626245a3952d7cb1d75..9bd07ab519cf6eba8c8b02a86232b70f4129dee6 100644
--- a/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx
+++ b/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx
@@ -357,9 +357,10 @@ void vtkXOpenGLRenderWindow::SetStereoCapableWindow(vtkTypeBool capable)
 }
 
 static int PbufferAllocFail = 0;
+#define vtkXOGLPbufferErrorHandler VTK_ABI_NAMESPACE_MANGLE(vtkXOGLPbufferErrorHandler)
 extern "C"
 {
-  int vtkXOGLPbufferErrorHandler(Display*, XErrorEvent*)
+  int VTK_ABI_NAMESPACE_MANGLE(vtkXOGLPbufferErrorHandler)(Display*, XErrorEvent*)
   {
     PbufferAllocFail = 1;
     return 1;
@@ -367,9 +368,11 @@ extern "C"
 }
 
 static bool ctxErrorOccurred = false;
+#define vtkXOGLContextCreationErrorHandler                                                         \
+  VTK_ABI_NAMESPACE_MANGLE(vtkXOGLContextCreationErrorHandler)
 extern "C"
 {
-  int vtkXOGLContextCreationErrorHandler(Display*, XErrorEvent*)
+  int VTK_ABI_NAMESPACE_MANGLE(vtkXOGLContextCreationErrorHandler)(Display*, XErrorEvent*)
   {
     ctxErrorOccurred = true;
     return 1;
@@ -1206,9 +1209,11 @@ void vtkXOpenGLRenderWindow::SetForceMakeCurrent()
 
 vtkTypeBool vtkXOpenGLRenderWindowFoundMatch;
 
+#define vtkXOpenGLRenderWindowPredProc VTK_ABI_NAMESPACE_MANGLE(vtkXOpenGLRenderWindowPredProc)
 extern "C"
 {
-  Bool vtkXOpenGLRenderWindowPredProc(Display* vtkNotUsed(disp), XEvent* event, char* arg)
+  Bool VTK_ABI_NAMESPACE_MANGLE(vtkXOpenGLRenderWindowPredProc)(
+    Display* vtkNotUsed(disp), XEvent* event, char* arg)
   {
     Window win = (Window)arg;
 
diff --git a/Rendering/OpenVR/CMakeLists.txt b/Rendering/OpenVR/CMakeLists.txt
index 69ccdbc8732981b29329b6fa70dc86c4b0f87e5d..1b44dfbca7c32c51a23edb866d4b264eaf46a0e9 100644
--- a/Rendering/OpenVR/CMakeLists.txt
+++ b/Rendering/OpenVR/CMakeLists.txt
@@ -13,6 +13,8 @@ set(classes
 
 vtk_encode_string(
   INPUT         "OpenVRDashboard.jpg"
+  EXPORT_HEADER "vtkRenderingOpenVRModule.h"
+  EXPORT_SYMBOL "VTKRENDERINGOPENVR_NO_EXPORT"
   HEADER_OUTPUT dashboard_header
   SOURCE_OUTPUT dashboard_source
   BINARY)
diff --git a/Rendering/Parallel/CMakeLists.txt b/Rendering/Parallel/CMakeLists.txt
index 618c8a665c3a40e1c97f13b69a52ceddab04d216..6ce7290ca4f6afadcce375c267bb59ca92f00d65 100644
--- a/Rendering/Parallel/CMakeLists.txt
+++ b/Rendering/Parallel/CMakeLists.txt
@@ -24,6 +24,8 @@ set(private_headers)
 foreach (shader_file IN LISTS shader_files)
   vtk_encode_string(
     INPUT         "${shader_file}"
+    EXPORT_HEADER "vtkRenderingParallelModule.h"
+    EXPORT_SYMBOL "VTKRENDERINGPARALLEL_NO_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source)
   list(APPEND sources ${source})
@@ -33,8 +35,8 @@ set(headers)
 foreach (shader_file IN LISTS public_shader_files)
   vtk_encode_string(
     INPUT         "${shader_file}"
-    EXPORT_SYMBOL "VTKRENDERINGPARALLEL_EXPORT"
     EXPORT_HEADER "vtkRenderingParallelModule.h"
+    EXPORT_SYMBOL "VTKRENDERINGPARALLEL_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source
     ABI_MANGLE_HEADER       "vtkABINamespace.h"
diff --git a/Rendering/ParallelLIC/CMakeLists.txt b/Rendering/ParallelLIC/CMakeLists.txt
index 484d158c58f5e61f0ba8e77b216d62e42841753e..a2b683bb27b6077ff72281c428e85bdb6a196304 100644
--- a/Rendering/ParallelLIC/CMakeLists.txt
+++ b/Rendering/ParallelLIC/CMakeLists.txt
@@ -30,6 +30,8 @@ set(headers)
 foreach(shader_file IN LISTS shader_files)
   vtk_encode_string(
     INPUT         "${shader_file}"
+    EXPORT_HEADER "vtkRenderingParallelLICModule.h"
+    EXPORT_SYMBOL "VTKRENDERINGPARALLELLIC_NO_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source)
   list(APPEND sources ${source})
diff --git a/Rendering/VR/CMakeLists.txt b/Rendering/VR/CMakeLists.txt
index 9494d86859b40a954a7a142d3b0ffb62059b1f19..9e2b475400b8c816b3333f00b2c563f77d405301 100644
--- a/Rendering/VR/CMakeLists.txt
+++ b/Rendering/VR/CMakeLists.txt
@@ -35,6 +35,8 @@ set(geometry_files
 foreach (geometry_file IN LISTS geometry_files)
   vtk_encode_string(
     INPUT         "${geometry_file}"
+    EXPORT_HEADER "vtkRenderingVRModule.h"
+    EXPORT_SYMBOL "VTKRENDERINGVR_NO_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source
     BINARY
diff --git a/Rendering/VolumeOpenGL2/CMakeLists.txt b/Rendering/VolumeOpenGL2/CMakeLists.txt
index 4de47c1cf9a1a2e10fef3aff1a6dc6b8d82bbf5f..c9164fb4c36db9251aa372e123a313d4eda7408b 100644
--- a/Rendering/VolumeOpenGL2/CMakeLists.txt
+++ b/Rendering/VolumeOpenGL2/CMakeLists.txt
@@ -32,6 +32,8 @@ set(private_headers)
 foreach (shader_file IN LISTS shader_files)
   vtk_encode_string(
     INPUT         "${shader_file}"
+    EXPORT_HEADER "vtkRenderingVolumeOpenGL2Module.h"
+    EXPORT_SYMBOL "VTKRENDERINGVOLUMEOPENGL2_NO_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source)
   list(APPEND sources ${source})
diff --git a/Testing/Core/vtkTestUtilities.h b/Testing/Core/vtkTestUtilities.h
index f8fe65655344d8c9e0bbcd8349299b0adc6d51b9..6f41bfe35cea25a69d4ae5213935583e0cc76976 100644
--- a/Testing/Core/vtkTestUtilities.h
+++ b/Testing/Core/vtkTestUtilities.h
@@ -33,6 +33,8 @@
 #pragma warning(disable : 4996) // 'function': was declared deprecated
 #endif
 
+VTK_ABI_NAMESPACE_BEGIN
+
 class vtkAbstractArray;
 class vtkDataObject;
 class vtkDataSet;
@@ -41,7 +43,6 @@ class vtkPartitionedDataSetCollection;
 class vtkCompositeDataSet;
 class vtkUnsignedCharArray;
 
-VTK_ABI_NAMESPACE_BEGIN
 struct VTKTESTINGCORE_EXPORT vtkTestUtilities
 {
   /**
diff --git a/Web/WebGLExporter/CMakeLists.txt b/Web/WebGLExporter/CMakeLists.txt
index 92e778d34b69c4cc3495a6b041e1d52dc3ecf6cf..0edb3c26818ec0ae835ffe67508f1e70bbd312f6 100644
--- a/Web/WebGLExporter/CMakeLists.txt
+++ b/Web/WebGLExporter/CMakeLists.txt
@@ -25,6 +25,8 @@ set(private_headers)
 foreach (javascript_file IN LISTS javascript_files)
   vtk_encode_string(
     INPUT         "${javascript_file}"
+    EXPORT_HEADER "vtkWebGLExporterModule.h"
+    EXPORT_SYMBOL "VTKWEBGLEXPORTER_NO_EXPORT"
     HEADER_OUTPUT header
     SOURCE_OUTPUT source)
   list(APPEND sources
diff --git a/Wrapping/PythonCore/CMakeLists.txt b/Wrapping/PythonCore/CMakeLists.txt
index 1c9d8bd7df4de1723cbdbbce1eb2e3137873cc86..a72ff352f51e5a9d0753e6656e61582fdced414e 100644
--- a/Wrapping/PythonCore/CMakeLists.txt
+++ b/Wrapping/PythonCore/CMakeLists.txt
@@ -32,21 +32,7 @@ vtk_module_add_module(VTK::WrappingPythonCore
   PRIVATE_CLASSES ${private_classes}
   PRIVATE_HEADERS ${private_headers}
   LIBRARY_NAME_SUFFIX "${vtk_python_version_major}.${vtk_python_version_minor}")
-vtk_add_test_mangling(VTK::WrappingPythonCore
-  EXEMPTIONS
-    PyVTKEnum_
-    PyVTKAddFile_
-    PyVTKNamespace_
-    PyVTKClass_
-    PyVTKObject_
-    PyVTKSpecialObject_
-    PyVTKSpecialType_
-    PyVTKTemplate_
-    PyVTKMethodDescriptor_
-    PyVTKNumberReference_
-    PyVTKReference_
-    PyVTKStringReference_
-    PyVTKTupleReference_)
+vtk_add_test_mangling(VTK::WrappingPythonCore)
 
 if (Python3_VERSION VERSION_LESS "3.7" AND NOT CMAKE_VERSION VERSION_LESS "3.19")
   include(CheckCompilerFlag)