added a comment about symbol visibility
diff --git a/docs/advanced.rst b/docs/advanced.rst
index cc44ab1..86ab34d 100644
--- a/docs/advanced.rst
+++ b/docs/advanced.rst
@@ -1068,11 +1068,11 @@
Partitioning code over multiple extension modules
=================================================
-It's straightforward to split binding code over multiple extension modules, while
-referencing types that are declared elsewhere. Everything "just" works without any special
-precautions. One exception to this rule occurs when extending a type declared
-in another extension module. Recall the basic example from Section
-:ref:`inheritance`.
+It's straightforward to split binding code over multiple extension modules,
+while referencing types that are declared elsewhere. Everything "just" works
+without any special precautions. One exception to this rule occurs when
+extending a type declared in another extension module. Recall the basic example
+from Section :ref:`inheritance`.
.. code-block:: cpp
@@ -1113,6 +1113,26 @@
Naturally, both methods will fail when there are cyclic dependencies.
+Note that compiling code which has its default symbol visibility set to
+*hidden* (e.g. via the command line flag ``-fvisibility=hidden`` on GCC/Clang) can interfere with the
+ability to access types defined in another extension module. Workarounds
+include changing the global symbol visibility (not recommended, because it will
+lead unnecessarily large binaries) or manually exporting types that are
+accessed by multiple extension modules:
+
+.. code-block:: cpp
+
+ #ifdef _WIN32
+ # define EXPORT_TYPE __declspec(dllexport)
+ #else
+ # define EXPORT_TYPE __attribute__ ((visibility("default")))
+ #endif
+
+ class EXPORT_TYPE Dog : public Animal {
+ ...
+ };
+
+
Treating STL data structures as opaque objects
==============================================