[poppler] CMakeLists.txt cpp/CMakeLists.txt cpp/poppler-global.h fofi/FoFiTrueType.h fofi/FoFiType1C.h glib/CMakeLists.txt glib/poppler-macros.h goo/gbase64.h goo/gbasename.h goo/gfile.h goo/glibc.h goo/GooString.h goo/GooTimer.h goo/gstrtod.h goo/ImgWriter.h goo/JpegWriter.h goo/NetPBMWriter.h goo/PNGWriter.h goo/TiffWriter.h poppler/Annot.h poppler/Array.h poppler/BBoxOutputDev.h poppler/CachedFile.h poppler/Catalog.h poppler/CertificateInfo.h poppler/DateInfo.h poppler/Dict.h poppler/Error.h poppler/FileSpec.h poppler/FontInfo.h poppler/Form.h poppler/Function.h poppler/GfxFont.h poppler/Gfx.h poppler/GfxState.h poppler/GlobalParams.h poppler/JSInfo.h poppler/Lexer.h poppler/Link.h poppler/MarkedContentOutputDev.h poppler/Movie.h poppler/Object.h poppler/OptionalContent.h poppler/Outline.h poppler/OutputDev.h poppler/Page.h poppler/PageTransition.h poppler/Parser.h poppler/PDFDocEncoding.h poppler/PDFDocFactory.h poppler/PDFDoc.h poppler/PSOutputDev.h poppler/Rendition.h poppler/Si gnatureHandler.h poppler/SignatureInfo.h poppler/Sound.h poppler/SplashOutputDev.h poppler/Stream.h poppler/StructElement.h poppler/TextOutputDev.h poppler/UnicodeMapFuncs.h poppler/UnicodeMap.h poppler/UnicodeTypeTable.h poppler/UTF.h poppler/XRef.h qt5/demos qt5/src qt5/tests qt6/demos qt6/src qt6/tests splash/SplashBitmap.h splash/Splash.h splash/SplashPath.h splash/SplashPattern.h

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Mar 1 21:43:45 UTC 2021


 CMakeLists.txt                   |    7 ++++
 cpp/CMakeLists.txt               |    2 +
 cpp/poppler-global.h             |   14 --------
 fofi/FoFiTrueType.h              |    3 +
 fofi/FoFiType1C.h                |    4 +-
 glib/CMakeLists.txt              |    8 +---
 glib/poppler-macros.h            |   33 -------------------
 goo/GooString.h                  |    4 +-
 goo/GooTimer.h                   |    4 +-
 goo/ImgWriter.h                  |    4 +-
 goo/JpegWriter.h                 |    3 +
 goo/NetPBMWriter.h               |    3 +
 goo/PNGWriter.h                  |    3 +
 goo/TiffWriter.h                 |    3 +
 goo/gbase64.h                    |    4 +-
 goo/gbasename.h                  |    3 +
 goo/gfile.h                      |   15 ++++----
 goo/glibc.h                      |    7 ++--
 goo/gstrtod.h                    |    4 +-
 poppler/Annot.h                  |   67 +++++++++++++++++++--------------------
 poppler/Array.h                  |    3 +
 poppler/BBoxOutputDev.h          |    2 -
 poppler/CachedFile.h             |    7 ++--
 poppler/Catalog.h                |    5 +-
 poppler/CertificateInfo.h        |    3 +
 poppler/DateInfo.h               |    7 ++--
 poppler/Dict.h                   |    3 +
 poppler/Error.h                  |    5 +-
 poppler/FileSpec.h               |    7 ++--
 poppler/FontInfo.h               |    5 +-
 poppler/Form.h                   |   17 +++++----
 poppler/Function.h               |    2 -
 poppler/Gfx.h                    |    5 +-
 poppler/GfxFont.h                |    9 ++---
 poppler/GfxState.h               |   27 ++++++++-------
 poppler/GlobalParams.h           |    7 ++--
 poppler/JSInfo.h                 |    4 +-
 poppler/Lexer.h                  |    2 -
 poppler/Link.h                   |   13 ++++---
 poppler/MarkedContentOutputDev.h |    3 +
 poppler/Movie.h                  |    3 +
 poppler/Object.h                 |    3 +
 poppler/OptionalContent.h        |    5 +-
 poppler/Outline.h                |    3 +
 poppler/OutputDev.h              |    3 +
 poppler/PDFDoc.h                 |    3 +
 poppler/PDFDocEncoding.h         |    5 +-
 poppler/PDFDocFactory.h          |    3 +
 poppler/PSOutputDev.h            |    3 +
 poppler/Page.h                   |    3 +
 poppler/PageTransition.h         |    2 -
 poppler/Parser.h                 |    2 -
 poppler/Rendition.h              |    2 -
 poppler/SignatureHandler.h       |    3 +
 poppler/SignatureInfo.h          |    4 +-
 poppler/Sound.h                  |    2 -
 poppler/SplashOutputDev.h        |    3 +
 poppler/Stream.h                 |   19 +++++------
 poppler/StructElement.h          |    5 +-
 poppler/TextOutputDev.h          |   13 ++++---
 poppler/UTF.h                    |   17 +++++----
 poppler/UnicodeMap.h             |    3 +
 poppler/UnicodeMapFuncs.h        |    2 -
 poppler/UnicodeTypeTable.h       |    5 +-
 poppler/XRef.h                   |    3 +
 qt5/demos/CMakeLists.txt         |    1 
 qt5/src/CMakeLists.txt           |    3 +
 qt5/src/poppler-export.h         |   20 -----------
 qt5/tests/CMakeLists.txt         |    1 
 qt6/demos/CMakeLists.txt         |    1 
 qt6/src/CMakeLists.txt           |    3 +
 qt6/src/poppler-export.h         |   20 -----------
 qt6/tests/CMakeLists.txt         |    1 
 splash/Splash.h                  |    3 +
 splash/SplashBitmap.h            |    3 +
 splash/SplashPath.h              |    3 +
 splash/SplashPattern.h           |    3 +
 77 files changed, 251 insertions(+), 261 deletions(-)

New commits:
commit ce1fcd4352f920a59d965310440be18ff48acb8f
Author: Albert Astals Cid <aacid at kde.org>
Date:   Sun Jan 17 18:31:19 2021 +0100

    Hide symbols by default
    
    Use cmake for better import/export defines

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c6be697..487d42c1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,6 +20,7 @@ test_big_endian(WORDS_BIGENDIAN)
 include(CheckFileOffsetBits)
 CHECK_FILE_OFFSET_BITS()
 
+include(GenerateExportHeader)
 include(GNUInstallDirs)
 
 set(ENABLE_FUZZER FALSE)
@@ -44,6 +45,10 @@ set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION_STRING}.${
 set(CMAKE_CXX_STANDARD 14)
 set(CMAKE_CXX_EXTENSIONS OFF)
 set(CMAKE_LINK_DEPENDS_NO_SHARED TRUE)
+set(CMAKE_C_VISIBILITY_PRESET hidden)
+set(CMAKE_CXX_VISIBILITY_PRESET hidden)
+set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
+
 
 # command line switches
 option(ENABLE_UNSTABLE_API_ABI_HEADERS "Install API/ABI unstable xpdf headers." OFF)
@@ -565,6 +570,7 @@ add_library(poppler STATIC ${poppler_SRCS})
 else()
 add_library(poppler ${poppler_SRCS})
 endif()
+generate_export_header(poppler BASE_NAME poppler-private EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler_private_export.h")
 set_target_properties(poppler PROPERTIES VERSION 108.0.0 SOVERSION 108)
 if(MINGW AND BUILD_SHARED_LIBS)
     get_target_property(POPPLER_SOVERSION poppler SOVERSION)
@@ -650,6 +656,7 @@ if(ENABLE_UNSTABLE_API_ABI_HEADERS)
     poppler/BBoxOutputDev.h
     poppler/UTF.h
     poppler/Sound.h
+    ${CMAKE_CURRENT_BINARY_DIR}/poppler_private_export.h
     ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
     DESTINATION include/poppler)
   install(FILES
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 5d351979..c37936b6 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -25,6 +25,7 @@ set(poppler_cpp_SRCS
 )
 
 add_library(poppler-cpp ${poppler_cpp_SRCS})
+generate_export_header(poppler-cpp BASE_NAME poppler-cpp EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler_cpp_export.h")
 set_target_properties(poppler-cpp PROPERTIES VERSION 0.9.0 SOVERSION 0)
 if(MINGW AND BUILD_SHARED_LIBS)
     get_target_property(POPPLER_CPP_SOVERSION poppler-cpp SOVERSION)
@@ -46,6 +47,7 @@ install(FILES
   poppler-page-transition.h
   poppler-rectangle.h
   poppler-toc.h
+  ${CMAKE_CURRENT_BINARY_DIR}/poppler_cpp_export.h
   ${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h
   DESTINATION include/poppler/cpp)
 
diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
index 1ae63bda..bdc12beb 100644
--- a/cpp/poppler-global.h
+++ b/cpp/poppler-global.h
@@ -22,19 +22,7 @@
 #ifndef POPPLER_GLOBAL_H
 #define POPPLER_GLOBAL_H
 
-#if defined(_WIN32)
-#    define LIB_EXPORT __declspec(dllexport)
-#    define LIB_IMPORT __declspec(dllimport)
-#else
-#    define LIB_EXPORT
-#    define LIB_IMPORT
-#endif
-
-#if defined(poppler_cpp_EXPORTS)
-#    define POPPLER_CPP_EXPORT LIB_EXPORT
-#else
-#    define POPPLER_CPP_EXPORT LIB_IMPORT
-#endif
+#include "poppler_cpp_export.h"
 
 #include <iosfwd>
 #include <string>
diff --git a/fofi/FoFiTrueType.h b/fofi/FoFiTrueType.h
index dd9a6b3f..b90ae2be 100644
--- a/fofi/FoFiTrueType.h
+++ b/fofi/FoFiTrueType.h
@@ -32,6 +32,7 @@
 #include <unordered_map>
 #include <string>
 #include "FoFiBase.h"
+#include "poppler_private_export.h"
 
 class GooString;
 struct TrueTypeTable;
@@ -41,7 +42,7 @@ struct TrueTypeCmap;
 // FoFiTrueType
 //------------------------------------------------------------------------
 
-class FoFiTrueType : public FoFiBase
+class POPPLER_PRIVATE_EXPORT FoFiTrueType : public FoFiBase
 {
 public:
     // Create a FoFiTrueType object from a memory buffer.
diff --git a/fofi/FoFiType1C.h b/fofi/FoFiType1C.h
index b2ebc934..ad7a4c3f 100644
--- a/fofi/FoFiType1C.h
+++ b/fofi/FoFiType1C.h
@@ -27,6 +27,8 @@
 
 #include "FoFiBase.h"
 
+#include "poppler_private_export.h"
+
 #include <set>
 
 class GooString;
@@ -148,7 +150,7 @@ struct Type1CEexecBuf
 // FoFiType1C
 //------------------------------------------------------------------------
 
-class FoFiType1C : public FoFiBase
+class POPPLER_PRIVATE_EXPORT FoFiType1C : public FoFiBase
 {
 public:
     // Create a FoFiType1C object from a memory buffer.
diff --git a/glib/CMakeLists.txt b/glib/CMakeLists.txt
index 961b7756..fd26a5d9 100644
--- a/glib/CMakeLists.txt
+++ b/glib/CMakeLists.txt
@@ -32,7 +32,6 @@ set(poppler_glib_public_headers
   poppler-form-field.h
   poppler-annot.h
   poppler-layer.h
-  poppler-macros.h
   poppler-movie.h
   poppler-media.h
   poppler.h
@@ -87,10 +86,8 @@ set(poppler_glib_generated_SRCS
   ${CMAKE_SOURCE_DIR}/poppler/CairoRescaleBox.cc
 )
 add_library(poppler-glib ${poppler_glib_SRCS} ${poppler_glib_generated_SRCS})
+generate_export_header(poppler-glib EXPORT_MACRO_NAME POPPLER_PUBLIC EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler-macros.h")
 set_target_properties(poppler-glib PROPERTIES VERSION 8.19.0 SOVERSION 8)
-set_target_properties(poppler-glib PROPERTIES C_VISIBILITY_PRESET hidden)
-set_target_properties(poppler-glib PROPERTIES CXX_VISIBILITY_PRESET hidden)
-set_target_properties(poppler-glib PROPERTIES VISIBILITY_INLINES_HIDDEN 1)
 if(MINGW AND BUILD_SHARED_LIBS)
     get_target_property(POPPLER_GLIB_SOVERSION poppler-glib SOVERSION)
     set_target_properties(poppler-glib PROPERTIES SUFFIX "-${POPPLER_GLIB_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
@@ -105,6 +102,7 @@ install(FILES
   ${poppler_glib_public_headers}
   ${CMAKE_CURRENT_BINARY_DIR}/poppler-enums.h
   ${CMAKE_CURRENT_BINARY_DIR}/poppler-features.h
+  ${CMAKE_CURRENT_BINARY_DIR}/poppler-macros.h
   DESTINATION include/poppler/glib)
 
 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
@@ -136,7 +134,7 @@ if (HAVE_INTROSPECTION AND BUILD_SHARED_LIBS)
 
   # Load temporary source-file lists, including a few generated at build
   set(orig_introspect_srcs ${poppler_glib_SRCS} ${poppler_glib_public_headers})
-  set(gen_introspect_srcs "poppler-enums.c" "poppler-enums.h" "poppler-features.h")
+  set(gen_introspect_srcs "poppler-enums.c" "poppler-enums.h" "poppler-features.h" "poppler-macros.h")
   # Prefix the files with their correct directories for full paths
   _gir_list_prefix(_orig_introspect_paths orig_introspect_srcs "${CMAKE_CURRENT_SOURCE_DIR}/")
   _gir_list_prefix(_gen_introspect_paths gen_introspect_srcs "${CMAKE_CURRENT_BINARY_DIR}/")
diff --git a/glib/poppler-macros.h b/glib/poppler-macros.h
deleted file mode 100644
index 41c4598e..00000000
--- a/glib/poppler-macros.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright © 2018 Christian Persch
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#ifndef __POPPLER_MACROS_H__
-#define __POPPLER_MACROS_H__
-
-/**
- * POPPLER_PUBLIC:
- */
-#if defined(_WIN32)
-#    define POPPLER_PUBLIC __declspec(dllexport)
-#elif defined(__GNUC__)
-#    define POPPLER_PUBLIC __attribute__((visibility("default"))) extern
-#else
-#    define POPPLER_PUBLIC
-#endif
-
-#endif /* __POPPLER_MACROS_H__ */
diff --git a/goo/GooString.h b/goo/GooString.h
index 11762645..81c2d5b7 100644
--- a/goo/GooString.h
+++ b/goo/GooString.h
@@ -38,6 +38,8 @@
 #ifndef GooString_H
 #define GooString_H
 
+#include "poppler_private_export.h"
+
 #include <cstdarg>
 #include <string>
 
@@ -47,7 +49,7 @@
 #    define GOOSTRING_FORMAT
 #endif
 
-class GooString : private std::string
+class POPPLER_PRIVATE_EXPORT GooString : private std::string
 {
 public:
     // Create an empty string.
diff --git a/goo/GooTimer.h b/goo/GooTimer.h
index c4faaaba..00b85618 100644
--- a/goo/GooTimer.h
+++ b/goo/GooTimer.h
@@ -18,6 +18,8 @@
 #define GOOTIMER_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
+
 #ifdef HAVE_GETTIMEOFDAY
 #    include <sys/time.h>
 #endif
@@ -33,7 +35,7 @@
 // GooTimer
 //------------------------------------------------------------------------
 
-class GooTimer
+class POPPLER_PRIVATE_EXPORT GooTimer
 {
 public:
     // Create a new timer.
diff --git a/goo/ImgWriter.h b/goo/ImgWriter.h
index e69b59e1..64f60efb 100644
--- a/goo/ImgWriter.h
+++ b/goo/ImgWriter.h
@@ -15,9 +15,11 @@
 #ifndef IMGWRITER_H
 #define IMGWRITER_H
 
+#include "poppler_private_export.h"
+
 #include <cstdio>
 
-class ImgWriter
+class POPPLER_PRIVATE_EXPORT ImgWriter
 {
 public:
     ImgWriter() = default;
diff --git a/goo/JpegWriter.h b/goo/JpegWriter.h
index a598ec34..8cdbc70e 100644
--- a/goo/JpegWriter.h
+++ b/goo/JpegWriter.h
@@ -19,6 +19,7 @@
 #define JPEGWRITER_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 
 #ifdef ENABLE_LIBJPEG
 
@@ -27,7 +28,7 @@
 
 struct JpegWriterPrivate;
 
-class JpegWriter : public ImgWriter
+class POPPLER_PRIVATE_EXPORT JpegWriter : public ImgWriter
 {
 public:
     /* RGB                 - 3 bytes/pixel
diff --git a/goo/NetPBMWriter.h b/goo/NetPBMWriter.h
index 9f864a1d..c3e5faa8 100644
--- a/goo/NetPBMWriter.h
+++ b/goo/NetPBMWriter.h
@@ -16,6 +16,7 @@
 #define NETPBMWRITER_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 
 #include "ImgWriter.h"
 
@@ -24,7 +25,7 @@
 //   http://netpbm.sourceforge.net/doc/pbm.html
 //   http://netpbm.sourceforge.net/doc/ppm.html
 
-class NetPBMWriter : public ImgWriter
+class POPPLER_PRIVATE_EXPORT NetPBMWriter : public ImgWriter
 {
 public:
     /* RGB        - 3 bytes/pixel
diff --git a/goo/PNGWriter.h b/goo/PNGWriter.h
index 67281258..f2f94c17 100644
--- a/goo/PNGWriter.h
+++ b/goo/PNGWriter.h
@@ -17,6 +17,7 @@
 #define PNGWRITER_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 
 #ifdef ENABLE_LIBPNG
 
@@ -24,7 +25,7 @@
 
 struct PNGWriterPrivate;
 
-class PNGWriter : public ImgWriter
+class POPPLER_PRIVATE_EXPORT PNGWriter : public ImgWriter
 {
 public:
     /* RGB        - 3 bytes/pixel
diff --git a/goo/TiffWriter.h b/goo/TiffWriter.h
index 2f7159ea..d0358efc 100644
--- a/goo/TiffWriter.h
+++ b/goo/TiffWriter.h
@@ -15,6 +15,7 @@
 #define TIFFWRITER_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 
 #ifdef ENABLE_LIBTIFF
 
@@ -23,7 +24,7 @@
 
 struct TiffWriterPrivate;
 
-class TiffWriter : public ImgWriter
+class POPPLER_PRIVATE_EXPORT TiffWriter : public ImgWriter
 {
 public:
     /* RGB                 - 3 bytes/pixel
diff --git a/goo/gbase64.h b/goo/gbase64.h
index 0a402773..08990687 100644
--- a/goo/gbase64.h
+++ b/goo/gbase64.h
@@ -15,10 +15,12 @@
 #ifndef GOO_GBASE64_H
 #define GOO_GBASE64_H
 
+#include "poppler_private_export.h"
+
 #include <string>
 #include <vector>
 
-std::string gbase64Encode(const void *input, size_t len);
+std::string POPPLER_PRIVATE_EXPORT gbase64Encode(const void *input, size_t len);
 
 inline std::string gbase64Encode(const std::vector<char> &input)
 {
diff --git a/goo/gbasename.h b/goo/gbasename.h
index 5e8d6c45..33e97649 100644
--- a/goo/gbasename.h
+++ b/goo/gbasename.h
@@ -17,7 +17,8 @@
 #define GBASENAME_H
 
 #include <string>
+#include "poppler_private_export.h"
 
-std::string gbasename(const char *filename);
+std::string POPPLER_PRIVATE_EXPORT gbasename(const char *filename);
 
 #endif // ndef GBASENAME_H
diff --git a/goo/gfile.h b/goo/gfile.h
index 4eb2cf4a..97cd517f 100644
--- a/goo/gfile.h
+++ b/goo/gfile.h
@@ -36,6 +36,7 @@
 #define GFILE_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include <cstdio>
 #include <cstdlib>
 #include <cstddef>
@@ -82,27 +83,27 @@ typedef long long Goffset;
 
 // Append a file name to a path string.  <path> may be an empty
 // string, denoting the current directory).  Returns <path>.
-extern GooString *appendToPath(GooString *path, const char *fileName);
+extern GooString POPPLER_PRIVATE_EXPORT *appendToPath(GooString *path, const char *fileName);
 
 #ifndef _WIN32
 // Open a file descriptor
 // Could be implemented on WIN32 too, but the only external caller of
 // this function is not used on WIN32
-extern int openFileDescriptor(const char *path, int flags);
+extern int POPPLER_PRIVATE_EXPORT openFileDescriptor(const char *path, int flags);
 #endif
 
 // Open a file.  On Windows, this converts the path from UTF-8 to
 // UCS-2 and calls _wfopen (if available).  On other OSes, this simply
 // calls fopen.
-extern FILE *openFile(const char *path, const char *mode);
+extern FILE POPPLER_PRIVATE_EXPORT *openFile(const char *path, const char *mode);
 
 // Just like fgets, but handles Unix, Mac, and/or DOS end-of-line
 // conventions.
-extern char *getLine(char *buf, int size, FILE *f);
+extern char POPPLER_PRIVATE_EXPORT *getLine(char *buf, int size, FILE *f);
 
 // Like fseek/ftell but uses platform specific variants that support large files
-extern int Gfseek(FILE *f, Goffset offset, int whence);
-extern Goffset Gftell(FILE *f);
+extern int POPPLER_PRIVATE_EXPORT Gfseek(FILE *f, Goffset offset, int whence);
+extern Goffset POPPLER_PRIVATE_EXPORT Gftell(FILE *f);
 
 // Largest offset supported by Gfseek/Gftell
 extern Goffset GoffsetMax();
@@ -111,7 +112,7 @@ extern Goffset GoffsetMax();
 // GooFile
 //------------------------------------------------------------------------
 
-class GooFile
+class POPPLER_PRIVATE_EXPORT GooFile
 {
 public:
     GooFile(const GooFile &) = delete;
diff --git a/goo/glibc.h b/goo/glibc.h
index fc8b12cf..3de68e9f 100644
--- a/goo/glibc.h
+++ b/goo/glibc.h
@@ -15,19 +15,20 @@
 #define GLIBC_H
 
 #include "config.h"
+#include "poppler_private_export.h"
 
 #include <ctime>
 
 #ifndef HAVE_GMTIME_R
-struct tm *gmtime_r(const time_t *timep, struct tm *result);
+struct tm POPPLER_PRIVATE_EXPORT *gmtime_r(const time_t *timep, struct tm *result);
 #endif
 
 #ifndef HAVE_LOCALTIME_R
-struct tm *localtime_r(const time_t *timep, struct tm *result);
+struct tm POPPLER_PRIVATE_EXPORT *localtime_r(const time_t *timep, struct tm *result);
 #endif
 
 #ifndef HAVE_TIMEGM
-time_t timegm(struct tm *tm);
+time_t POPPLER_PRIVATE_EXPORT timegm(struct tm *tm);
 #endif
 
 #ifndef HAVE_STRTOK_R
diff --git a/goo/gstrtod.h b/goo/gstrtod.h
index 66ba4694..fbf1872f 100644
--- a/goo/gstrtod.h
+++ b/goo/gstrtod.h
@@ -23,6 +23,8 @@
 #ifndef GSTRTOD_H
 #define GSTRTOD_H
 
+#include "poppler_private_export.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -33,7 +35,7 @@ extern "C" {
  * A limitation of the implementation is that this function
  * will still accept localized versions of infinities and NANs.
  */
-double gatof(const char *nptr);
+double POPPLER_PRIVATE_EXPORT gatof(const char *nptr);
 double gstrtod(const char *nptr, char **endptr);
 
 #ifdef __cplusplus
diff --git a/poppler/Annot.h b/poppler/Annot.h
index bb63680e..8c0fabe6 100644
--- a/poppler/Annot.h
+++ b/poppler/Annot.h
@@ -52,6 +52,7 @@
 #include <vector>
 
 #include "Object.h"
+#include "poppler_private_export.h"
 
 class XRef;
 class Gfx;
@@ -114,7 +115,7 @@ protected:
 // AnnotPath
 //------------------------------------------------------------------------
 
-class AnnotPath
+class POPPLER_PRIVATE_EXPORT AnnotPath
 {
 public:
     AnnotPath();
@@ -140,7 +141,7 @@ protected:
 // AnnotCalloutLine
 //------------------------------------------------------------------------
 
-class AnnotCalloutLine
+class POPPLER_PRIVATE_EXPORT AnnotCalloutLine
 {
 public:
     AnnotCalloutLine(double x1, double y1, double x2, double y2);
@@ -162,7 +163,7 @@ protected:
 // AnnotCalloutMultiLine
 //------------------------------------------------------------------------
 
-class AnnotCalloutMultiLine : public AnnotCalloutLine
+class POPPLER_PRIVATE_EXPORT AnnotCalloutMultiLine : public AnnotCalloutLine
 {
 public:
     AnnotCalloutMultiLine(double x1, double y1, double x2, double y2, double x3, double y3);
@@ -202,10 +203,10 @@ private:
 // AnnotQuadrilateral
 //------------------------------------------------------------------------
 
-class AnnotQuadrilaterals
+class POPPLER_PRIVATE_EXPORT AnnotQuadrilaterals
 {
 public:
-    class AnnotQuadrilateral
+    class POPPLER_PRIVATE_EXPORT AnnotQuadrilateral
     {
     public:
         AnnotQuadrilateral();
@@ -290,7 +291,7 @@ protected:
 // AnnotBorderArray
 //------------------------------------------------------------------------
 
-class AnnotBorderArray : public AnnotBorder
+class POPPLER_PRIVATE_EXPORT AnnotBorderArray : public AnnotBorder
 {
 public:
     AnnotBorderArray();
@@ -336,7 +337,7 @@ private:
 // AnnotColor
 //------------------------------------------------------------------------
 
-class AnnotColor
+class POPPLER_PRIVATE_EXPORT AnnotColor
 {
 public:
     enum AnnotColorSpace
@@ -369,7 +370,7 @@ private:
 // DefaultAppearance
 //------------------------------------------------------------------------
 
-class DefaultAppearance
+class POPPLER_PRIVATE_EXPORT DefaultAppearance
 {
 public:
     DefaultAppearance(Object &&fontNameA, double fontPtSizeA, std::unique_ptr<AnnotColor> fontColorA);
@@ -473,7 +474,7 @@ protected:
 // AnnotAppearanceCharacs
 //------------------------------------------------------------------------
 
-class AnnotAppearanceCharacs
+class POPPLER_PRIVATE_EXPORT AnnotAppearanceCharacs
 {
 public:
     enum AnnotAppearanceCharacsTextPos
@@ -602,7 +603,7 @@ private:
 // Annot
 //------------------------------------------------------------------------
 
-class Annot
+class POPPLER_PRIVATE_EXPORT Annot
 {
     friend class Annots;
     friend class Page;
@@ -798,7 +799,7 @@ protected:
 // AnnotPopup
 //------------------------------------------------------------------------
 
-class AnnotPopup : public Annot
+class POPPLER_PRIVATE_EXPORT AnnotPopup : public Annot
 {
 public:
     AnnotPopup(PDFDoc *docA, PDFRectangle *rect);
@@ -821,7 +822,7 @@ protected:
 // AnnotMarkup
 //------------------------------------------------------------------------
 
-class AnnotMarkup : public Annot
+class POPPLER_PRIVATE_EXPORT AnnotMarkup : public Annot
 {
 public:
     enum AnnotMarkupReplyType
@@ -876,7 +877,7 @@ private:
 // AnnotText
 //------------------------------------------------------------------------
 
-class AnnotText : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotText : public AnnotMarkup
 {
 public:
     enum AnnotTextState
@@ -921,7 +922,7 @@ private:
 // AnnotMovie
 //------------------------------------------------------------------------
 
-class AnnotMovie : public Annot
+class POPPLER_PRIVATE_EXPORT AnnotMovie : public Annot
 {
 public:
     AnnotMovie(PDFDoc *docA, PDFRectangle *rect, Movie *movieA);
@@ -944,7 +945,7 @@ private:
 // AnnotScreen
 //------------------------------------------------------------------------
 
-class AnnotScreen : public Annot
+class POPPLER_PRIVATE_EXPORT AnnotScreen : public Annot
 {
 public:
     AnnotScreen(PDFDoc *docA, PDFRectangle *rect);
@@ -1008,7 +1009,7 @@ protected:
 // AnnotFreeText
 //------------------------------------------------------------------------
 
-class AnnotFreeText : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotFreeText : public AnnotMarkup
 {
 public:
     enum AnnotFreeTextQuadding
@@ -1076,7 +1077,7 @@ protected:
 // AnnotLine
 //------------------------------------------------------------------------
 
-class AnnotLine : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotLine : public AnnotMarkup
 {
 public:
     enum AnnotLineIntent
@@ -1154,7 +1155,7 @@ protected:
 // AnnotTextMarkup
 //------------------------------------------------------------------------
 
-class AnnotTextMarkup : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotTextMarkup : public AnnotMarkup
 {
 public:
     AnnotTextMarkup(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType);
@@ -1183,7 +1184,7 @@ private:
 // AnnotStamp
 //------------------------------------------------------------------------
 
-class AnnotStamp : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotStamp : public AnnotMarkup
 {
 public:
     AnnotStamp(PDFDoc *docA, PDFRectangle *rect);
@@ -1205,7 +1206,7 @@ private:
 // AnnotGeometry
 //------------------------------------------------------------------------
 
-class AnnotGeometry : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotGeometry : public AnnotMarkup
 {
 public:
     AnnotGeometry(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType);
@@ -1234,7 +1235,7 @@ private:
 // AnnotPolygon
 //------------------------------------------------------------------------
 
-class AnnotPolygon : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotPolygon : public AnnotMarkup
 {
 public:
     enum AnnotPolygonIntent
@@ -1285,7 +1286,7 @@ private:
 // AnnotCaret
 //------------------------------------------------------------------------
 
-class AnnotCaret : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotCaret : public AnnotMarkup
 {
 public:
     enum AnnotCaretSymbol
@@ -1315,7 +1316,7 @@ private:
 // AnnotInk
 //------------------------------------------------------------------------
 
-class AnnotInk : public AnnotMarkup
+class POPPLER_PRIVATE_EXPORT AnnotInk : public AnnotMarkup
 {
 public:
     AnnotInk(PDFDoc *docA, PDFRectangle *rect);
@@ -1403,7 +1404,7 @@ private:
 // AnnotWidget
 //------------------------------------------------------------------------
 
-class AnnotWidget : public Annot
+class POPPLER_PRIVATE_EXPORT AnnotWidget : public Annot
 {
 public:
     enum AnnotWidgetHighlightMode
@@ -1520,10 +1521,10 @@ private:
 // AnnotRichMedia
 //------------------------------------------------------------------------
 
-class AnnotRichMedia : public Annot
+class POPPLER_PRIVATE_EXPORT AnnotRichMedia : public Annot
 {
 public:
-    class Params
+    class POPPLER_PRIVATE_EXPORT Params
     {
     public:
         Params(Dict *dict);
@@ -1539,7 +1540,7 @@ public:
         std::unique_ptr<GooString> flashVars; // FlashVars
     };
 
-    class Instance
+    class POPPLER_PRIVATE_EXPORT Instance
     {
     public:
         enum Type
@@ -1565,7 +1566,7 @@ public:
         std::unique_ptr<Params> params; // Params
     };
 
-    class Configuration
+    class POPPLER_PRIVATE_EXPORT Configuration
     {
     public:
         enum Type
@@ -1597,7 +1598,7 @@ public:
 
     class Content;
 
-    class Asset
+    class POPPLER_PRIVATE_EXPORT Asset
     {
     public:
         Asset();
@@ -1616,7 +1617,7 @@ public:
         Object fileSpec;
     };
 
-    class Content
+    class POPPLER_PRIVATE_EXPORT Content
     {
     public:
         Content(Dict *dict);
@@ -1640,7 +1641,7 @@ public:
         int nAssets;
     };
 
-    class Activation
+    class POPPLER_PRIVATE_EXPORT Activation
     {
     public:
         enum Condition
@@ -1659,7 +1660,7 @@ public:
         Condition condition;
     };
 
-    class Deactivation
+    class POPPLER_PRIVATE_EXPORT Deactivation
     {
     public:
         enum Condition
@@ -1678,7 +1679,7 @@ public:
         Condition condition;
     };
 
-    class Settings
+    class POPPLER_PRIVATE_EXPORT Settings
     {
     public:
         Settings(Dict *dict);
diff --git a/poppler/Array.h b/poppler/Array.h
index 989ae32c..782ef725 100644
--- a/poppler/Array.h
+++ b/poppler/Array.h
@@ -33,6 +33,7 @@
 #include <vector>
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "Object.h"
 
 class XRef;
@@ -41,7 +42,7 @@ class XRef;
 // Array
 //------------------------------------------------------------------------
 
-class Array
+class POPPLER_PRIVATE_EXPORT Array
 {
 public:
     // Constructor.
diff --git a/poppler/BBoxOutputDev.h b/poppler/BBoxOutputDev.h
index f661e978..e48122fd 100644
--- a/poppler/BBoxOutputDev.h
+++ b/poppler/BBoxOutputDev.h
@@ -12,7 +12,7 @@
 #include <GfxState.h>
 #include <OutputDev.h>
 
-class BBoxOutputDev : public OutputDev
+class POPPLER_PRIVATE_EXPORT BBoxOutputDev : public OutputDev
 {
 public:
     bool upsideDown() override { return false; }
diff --git a/poppler/CachedFile.h b/poppler/CachedFile.h
index bc73b59a..588c0e4e 100644
--- a/poppler/CachedFile.h
+++ b/poppler/CachedFile.h
@@ -16,6 +16,7 @@
 #define CACHEDFILE_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 
 #include "Object.h"
 #include "Stream.h"
@@ -38,7 +39,7 @@ class CachedFileLoader;
 // needs from the CachedFileLoader.
 //------------------------------------------------------------------------
 
-class CachedFile
+class POPPLER_PRIVATE_EXPORT CachedFile
 {
 
     friend class CachedFileWriter;
@@ -96,7 +97,7 @@ private:
 // should be written.
 //------------------------------------------------------------------------
 
-class CachedFileWriter
+class POPPLER_PRIVATE_EXPORT CachedFileWriter
 {
 
 public:
@@ -123,7 +124,7 @@ private:
 // loadng data from an URI into a CachedFile.
 //------------------------------------------------------------------------
 
-class CachedFileLoader
+class POPPLER_PRIVATE_EXPORT CachedFileLoader
 {
 
 public:
diff --git a/poppler/Catalog.h b/poppler/Catalog.h
index 469e73f5..587ad1cf 100644
--- a/poppler/Catalog.h
+++ b/poppler/Catalog.h
@@ -41,6 +41,7 @@
 #define CATALOG_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "Object.h"
 #include "Link.h"
 
@@ -64,7 +65,7 @@ class StructTreeRoot;
 // NameTree
 //------------------------------------------------------------------------
 
-class NameTree
+class POPPLER_PRIVATE_EXPORT NameTree
 {
 public:
     NameTree();
@@ -105,7 +106,7 @@ private:
 // Catalog
 //------------------------------------------------------------------------
 
-class Catalog
+class POPPLER_PRIVATE_EXPORT Catalog
 {
 public:
     // Constructor.
diff --git a/poppler/CertificateInfo.h b/poppler/CertificateInfo.h
index b2d4506e..b99edc8c 100644
--- a/poppler/CertificateInfo.h
+++ b/poppler/CertificateInfo.h
@@ -17,6 +17,7 @@
 #include <memory>
 #include <ctime>
 #include "goo/GooString.h"
+#include "poppler_private_export.h"
 
 enum CertificateKeyUsageExtension
 {
@@ -39,7 +40,7 @@ enum PublicKeyType
     OTHERKEY
 };
 
-class X509CertificateInfo
+class POPPLER_PRIVATE_EXPORT X509CertificateInfo
 {
 public:
     X509CertificateInfo();
diff --git a/poppler/DateInfo.h b/poppler/DateInfo.h
index eec0e502..640f60d5 100644
--- a/poppler/DateInfo.h
+++ b/poppler/DateInfo.h
@@ -25,19 +25,20 @@
 #define DATE_INFO_H
 
 #include "goo/GooString.h"
+#include "poppler_private_export.h"
 #include <ctime>
 
-bool parseDateString(const char *string, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute);
+bool POPPLER_PRIVATE_EXPORT parseDateString(const char *string, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute);
 
 /* Converts the time_t into a PDF Date format string.
  * If timeA is NULL, current time is used.
  * Returns new GooString. Free with delete.
  */
-GooString *timeToDateString(const time_t *timeA);
+GooString POPPLER_PRIVATE_EXPORT *timeToDateString(const time_t *timeA);
 
 /* Convert PDF date string to time.
  * Returns -1 if conversion fails.
  */
-time_t dateStringToTime(const GooString *dateString);
+time_t POPPLER_PRIVATE_EXPORT dateStringToTime(const GooString *dateString);
 
 #endif
diff --git a/poppler/Dict.h b/poppler/Dict.h
index 688f0671..fb9af6c0 100644
--- a/poppler/Dict.h
+++ b/poppler/Dict.h
@@ -37,13 +37,14 @@
 #include <utility>
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "Object.h"
 
 //------------------------------------------------------------------------
 // Dict
 //------------------------------------------------------------------------
 
-class Dict
+class POPPLER_PRIVATE_EXPORT Dict
 {
 public:
     // Constructor.
diff --git a/poppler/Error.h b/poppler/Error.h
index ff8f7187..b292afcf 100644
--- a/poppler/Error.h
+++ b/poppler/Error.h
@@ -30,6 +30,7 @@
 
 #include <cstdarg>
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "goo/gfile.h"
 #include "goo/GooString.h"
 
@@ -51,8 +52,8 @@ enum ErrorCategory
 
 using ErrorCallback = void (*)(ErrorCategory category, Goffset pos, const char *msg);
 
-extern void setErrorCallback(ErrorCallback cbk);
+extern void POPPLER_PRIVATE_EXPORT setErrorCallback(ErrorCallback cbk);
 
-extern void CDECL error(ErrorCategory category, Goffset pos, const char *msg, ...) GOOSTRING_FORMAT;
+extern void CDECL POPPLER_PRIVATE_EXPORT error(ErrorCategory category, Goffset pos, const char *msg, ...) GOOSTRING_FORMAT;
 
 #endif
diff --git a/poppler/FileSpec.h b/poppler/FileSpec.h
index d587996d..e526e50e 100644
--- a/poppler/FileSpec.h
+++ b/poppler/FileSpec.h
@@ -17,8 +17,9 @@
 #define FILE_SPEC_H
 
 #include "Object.h"
+#include "poppler_private_export.h"
 
-class EmbFile
+class POPPLER_PRIVATE_EXPORT EmbFile
 {
 public:
     EmbFile(Object &&efStream);
@@ -48,7 +49,7 @@ private:
     Object m_objStr;
 };
 
-class FileSpec
+class POPPLER_PRIVATE_EXPORT FileSpec
 {
 public:
     FileSpec(const Object *fileSpec);
@@ -79,6 +80,6 @@ private:
 };
 
 Object getFileSpecName(const Object *fileSpec);
-Object getFileSpecNameForPlatform(const Object *fileSpec);
+Object POPPLER_PRIVATE_EXPORT getFileSpecNameForPlatform(const Object *fileSpec);
 
 #endif /* FILE_SPEC_H */
diff --git a/poppler/FontInfo.h b/poppler/FontInfo.h
index b95f03cf..85279859 100644
--- a/poppler/FontInfo.h
+++ b/poppler/FontInfo.h
@@ -28,13 +28,14 @@
 #define FONT_INFO_H
 
 #include "Object.h"
+#include "poppler_private_export.h"
 
 #include <unordered_set>
 
 class GfxFont;
 class PDFDoc;
 
-class FontInfo
+class POPPLER_PRIVATE_EXPORT FontInfo
 {
 public:
     enum Type
@@ -86,7 +87,7 @@ private:
     Ref embRef;
 };
 
-class FontInfoScanner
+class POPPLER_PRIVATE_EXPORT FontInfoScanner
 {
 public:
     // Constructor.
diff --git a/poppler/Form.h b/poppler/Form.h
index 4538b255..dcf89760 100644
--- a/poppler/Form.h
+++ b/poppler/Form.h
@@ -32,6 +32,7 @@
 
 #include "Object.h"
 #include "Annot.h"
+#include "poppler_private_export.h"
 
 #include <ctime>
 
@@ -101,7 +102,7 @@ class FormFieldChoice;
 // to a page.
 //------------------------------------------------------------------------
 
-class FormWidget
+class POPPLER_PRIVATE_EXPORT FormWidget
 {
 public:
     virtual ~FormWidget();
@@ -181,7 +182,7 @@ protected:
 // FormWidgetButton
 //------------------------------------------------------------------------
 
-class FormWidgetButton : public FormWidget
+class POPPLER_PRIVATE_EXPORT FormWidgetButton : public FormWidget
 {
 public:
     FormWidgetButton(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
@@ -205,7 +206,7 @@ protected:
 // FormWidgetText
 //------------------------------------------------------------------------
 
-class FormWidgetText : public FormWidget
+class POPPLER_PRIVATE_EXPORT FormWidgetText : public FormWidget
 {
 public:
     FormWidgetText(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
@@ -240,7 +241,7 @@ protected:
 // FormWidgetChoice
 //------------------------------------------------------------------------
 
-class FormWidgetChoice : public FormWidget
+class POPPLER_PRIVATE_EXPORT FormWidgetChoice : public FormWidget
 {
 public:
     FormWidgetChoice(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
@@ -284,7 +285,7 @@ protected:
 // FormWidgetSignature
 //------------------------------------------------------------------------
 
-class FormWidgetSignature : public FormWidget
+class POPPLER_PRIVATE_EXPORT FormWidgetSignature : public FormWidget
 {
 public:
     FormWidgetSignature(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
@@ -587,7 +588,7 @@ protected:
 // FormFieldSignature
 //------------------------------------------------------------------------
 
-class FormFieldSignature : public FormField
+class POPPLER_PRIVATE_EXPORT FormFieldSignature : public FormField
 {
 public:
     FormFieldSignature(PDFDoc *docA, Object &&dict, const Ref ref, FormField *parent, std::set<int> *usedParents);
@@ -636,7 +637,7 @@ private:
 // Catalog entry).
 //------------------------------------------------------------------------
 
-class Form
+class POPPLER_PRIVATE_EXPORT Form
 {
 public:
     Form(PDFDoc *docA, Object *acroForm);
@@ -694,7 +695,7 @@ private:
 // FormPageWidgets
 //------------------------------------------------------------------------
 
-class FormPageWidgets
+class POPPLER_PRIVATE_EXPORT FormPageWidgets
 {
 public:
     FormPageWidgets(Annots *annots, unsigned int page, Form *form);
diff --git a/poppler/Function.h b/poppler/Function.h
index 73fca2d7..feb4a3c7 100644
--- a/poppler/Function.h
+++ b/poppler/Function.h
@@ -43,7 +43,7 @@ class PSStack;
 #define funcMaxOutputs 32
 #define sampledFuncMaxInputs 16
 
-class Function
+class POPPLER_PRIVATE_EXPORT Function
 {
 public:
     Function();
diff --git a/poppler/Gfx.h b/poppler/Gfx.h
index 1e5955f5..ae9fa76f 100644
--- a/poppler/Gfx.h
+++ b/poppler/Gfx.h
@@ -36,6 +36,7 @@
 #define GFX_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "GfxState.h"
 #include "Object.h"
 #include "PopplerCache.h"
@@ -107,7 +108,7 @@ struct Operator
 
 //------------------------------------------------------------------------
 
-class GfxResources
+class POPPLER_PRIVATE_EXPORT GfxResources
 {
 public:
     GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA);
@@ -148,7 +149,7 @@ private:
 // Gfx
 //------------------------------------------------------------------------
 
-class Gfx
+class POPPLER_PRIVATE_EXPORT Gfx
 {
 public:
     // Constructor for regular output.
diff --git a/poppler/GfxFont.h b/poppler/GfxFont.h
index 8bbd1eff..16f062e9 100644
--- a/poppler/GfxFont.h
+++ b/poppler/GfxFont.h
@@ -36,6 +36,7 @@
 #include "goo/GooString.h"
 #include "Object.h"
 #include "CharTypes.h"
+#include "poppler_private_export.h"
 
 class Dict;
 class CMap;
@@ -110,7 +111,7 @@ enum GfxFontLocType
     gfxFontLocResident // font resident in PS printer
 };
 
-class GfxFontLoc
+class POPPLER_PRIVATE_EXPORT GfxFontLoc
 {
 public:
     GfxFontLoc();
@@ -148,7 +149,7 @@ public:
 #define fontItalic (1 << 6)
 #define fontBold (1 << 18)
 
-class GfxFont
+class POPPLER_PRIVATE_EXPORT GfxFont
 {
 public:
     enum Stretch
@@ -332,7 +333,7 @@ protected:
 // Gfx8BitFont
 //------------------------------------------------------------------------
 
-class Gfx8BitFont : public GfxFont
+class POPPLER_PRIVATE_EXPORT Gfx8BitFont : public GfxFont
 {
 public:
     Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict);
@@ -392,7 +393,7 @@ private:
 // GfxCIDFont
 //------------------------------------------------------------------------
 
-class GfxCIDFont : public GfxFont
+class POPPLER_PRIVATE_EXPORT GfxCIDFont : public GfxFont
 {
 public:
     GfxCIDFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict);
diff --git a/poppler/GfxState.h b/poppler/GfxState.h
index aec5c6c8..5aeb6e24 100644
--- a/poppler/GfxState.h
+++ b/poppler/GfxState.h
@@ -36,6 +36,7 @@
 #define GFXSTATE_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 
 #include "Object.h"
 #include "Function.h"
@@ -216,7 +217,7 @@ enum GfxColorSpaceMode
 typedef std::shared_ptr<void> GfxLCMSProfilePtr;
 
 #ifdef USE_CMS
-GfxLCMSProfilePtr make_GfxLCMSProfilePtr(void *profile);
+GfxLCMSProfilePtr POPPLER_PRIVATE_EXPORT make_GfxLCMSProfilePtr(void *profile);
 #endif
 
 // wrapper of cmsHTRANSFORM to copy
@@ -241,7 +242,7 @@ private:
     unsigned int transformPixelType;
 };
 
-class GfxColorSpace
+class POPPLER_PRIVATE_EXPORT GfxColorSpace
 {
 public:
     GfxColorSpace();
@@ -313,7 +314,7 @@ protected:
 // GfxDeviceGrayColorSpace
 //------------------------------------------------------------------------
 
-class GfxDeviceGrayColorSpace : public GfxColorSpace
+class POPPLER_PRIVATE_EXPORT GfxDeviceGrayColorSpace : public GfxColorSpace
 {
 public:
     GfxDeviceGrayColorSpace();
@@ -389,7 +390,7 @@ private:
 // GfxDeviceRGBColorSpace
 //------------------------------------------------------------------------
 
-class GfxDeviceRGBColorSpace : public GfxColorSpace
+class POPPLER_PRIVATE_EXPORT GfxDeviceRGBColorSpace : public GfxColorSpace
 {
 public:
     GfxDeviceRGBColorSpace();
@@ -469,7 +470,7 @@ private:
 // GfxDeviceCMYKColorSpace
 //------------------------------------------------------------------------
 
-class GfxDeviceCMYKColorSpace : public GfxColorSpace
+class POPPLER_PRIVATE_EXPORT GfxDeviceCMYKColorSpace : public GfxColorSpace
 {
 public:
     GfxDeviceCMYKColorSpace();
@@ -547,7 +548,7 @@ private:
 // GfxICCBasedColorSpace
 //------------------------------------------------------------------------
 
-class GfxICCBasedColorSpace : public GfxColorSpace
+class POPPLER_PRIVATE_EXPORT GfxICCBasedColorSpace : public GfxColorSpace
 {
 public:
     GfxICCBasedColorSpace(int nCompsA, GfxColorSpace *altA, const Ref *iccProfileStreamA);
@@ -899,7 +900,7 @@ protected:
 // GfxUnivariateShading
 //------------------------------------------------------------------------
 
-class GfxUnivariateShading : public GfxShading
+class POPPLER_PRIVATE_EXPORT GfxUnivariateShading : public GfxShading
 {
 public:
     GfxUnivariateShading(int typeA, double t0A, double t1A, std::vector<std::unique_ptr<Function>> &&funcsA, bool extend0A, bool extend1A);
@@ -940,7 +941,7 @@ private:
 // GfxFunctionShading
 //------------------------------------------------------------------------
 
-class GfxFunctionShading : public GfxShading
+class POPPLER_PRIVATE_EXPORT GfxFunctionShading : public GfxShading
 {
 public:
     GfxFunctionShading(double x0A, double y0A, double x1A, double y1A, const double *matrixA, std::vector<std::unique_ptr<Function>> &&funcsA);
@@ -1046,7 +1047,7 @@ struct GfxGouraudVertex
     GfxColor color;
 };
 
-class GfxGouraudTriangleShading : public GfxShading
+class POPPLER_PRIVATE_EXPORT GfxGouraudTriangleShading : public GfxShading
 {
 public:
     GfxGouraudTriangleShading(int typeA, GfxGouraudVertex *verticesA, int nVerticesA, int (*trianglesA)[3], int nTrianglesA, std::vector<std::unique_ptr<Function>> &&funcsA);
@@ -1138,7 +1139,7 @@ struct GfxPatch
     ColorValue color[2][2];
 };
 
-class GfxPatchMeshShading : public GfxShading
+class POPPLER_PRIVATE_EXPORT GfxPatchMeshShading : public GfxShading
 {
 public:
     GfxPatchMeshShading(int typeA, GfxPatch *patchesA, int nPatchesA, std::vector<std::unique_ptr<Function>> &&funcsA);
@@ -1187,7 +1188,7 @@ private:
 // GfxImageColorMap
 //------------------------------------------------------------------------
 
-class GfxImageColorMap
+class POPPLER_PRIVATE_EXPORT GfxImageColorMap
 {
 public:
     // Constructor.
@@ -1319,7 +1320,7 @@ private:
     GfxSubpath(const GfxSubpath *subpath);
 };
 
-class GfxPath
+class POPPLER_PRIVATE_EXPORT GfxPath
 {
 public:
     // Constructor.
@@ -1381,7 +1382,7 @@ private:
 // GfxState
 //------------------------------------------------------------------------
 
-class GfxState
+class POPPLER_PRIVATE_EXPORT GfxState
 {
 public:
     /**
diff --git a/poppler/GlobalParams.h b/poppler/GlobalParams.h
index 4568e123..980dc87b 100644
--- a/poppler/GlobalParams.h
+++ b/poppler/GlobalParams.h
@@ -39,6 +39,7 @@
 
 #include <cassert>
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include <cstdio>
 #include "CharTypes.h"
 #include "UnicodeMap.h"
@@ -64,7 +65,7 @@ class SysFontList;
 //------------------------------------------------------------------------
 
 // The global parameters object.
-extern std::unique_ptr<GlobalParams> globalParams;
+extern std::unique_ptr<GlobalParams> POPPLER_PRIVATE_EXPORT globalParams;
 
 //------------------------------------------------------------------------
 
@@ -78,7 +79,7 @@ enum SysFontType
 
 //------------------------------------------------------------------------
 
-class GlobalParams
+class POPPLER_PRIVATE_EXPORT GlobalParams
 {
 public:
     // Initialize the global parameters
@@ -201,7 +202,7 @@ private:
     const char *popplerDataDir;
 };
 
-class GlobalParamsIniter
+class POPPLER_PRIVATE_EXPORT GlobalParamsIniter
 {
 public:
     GlobalParamsIniter(ErrorCallback errorCallback);
diff --git a/poppler/JSInfo.h b/poppler/JSInfo.h
index 4cd17bf5..aca0d6b1 100644
--- a/poppler/JSInfo.h
+++ b/poppler/JSInfo.h
@@ -21,13 +21,13 @@
 #include <cstdio>
 #include "Object.h"
 #include "PDFDoc.h"
-
+#include "poppler_private_export.h"
 #include "Link.h"
 #include "UnicodeMap.h"
 
 class PDFDoc;
 
-class JSInfo
+class POPPLER_PRIVATE_EXPORT JSInfo
 {
 public:
     // Constructor.
diff --git a/poppler/Lexer.h b/poppler/Lexer.h
index 926bbf05..3efa9c87 100644
--- a/poppler/Lexer.h
+++ b/poppler/Lexer.h
@@ -38,7 +38,7 @@ class XRef;
 // Lexer
 //------------------------------------------------------------------------
 
-class Lexer
+class POPPLER_PRIVATE_EXPORT Lexer
 {
 public:
     // Construct a lexer for a single stream.  Deletes the stream when
diff --git a/poppler/Link.h b/poppler/Link.h
index c8afbdc1..63803b60 100644
--- a/poppler/Link.h
+++ b/poppler/Link.h
@@ -33,6 +33,7 @@
 #define LINK_H
 
 #include "Object.h"
+#include "poppler_private_export.h"
 #include <memory>
 #include <set>
 
@@ -65,7 +66,7 @@ enum LinkActionKind
     actionUnknown // anything else
 };
 
-class LinkAction
+class POPPLER_PRIVATE_EXPORT LinkAction
 {
 public:
     LinkAction();
@@ -112,7 +113,7 @@ enum LinkDestKind
     destFitBV
 };
 
-class LinkDest
+class POPPLER_PRIVATE_EXPORT LinkDest
 {
 public:
     // Build a LinkDest from the array.
@@ -161,7 +162,7 @@ private:
 // LinkGoTo
 //------------------------------------------------------------------------
 
-class LinkGoTo : public LinkAction
+class POPPLER_PRIVATE_EXPORT LinkGoTo : public LinkAction
 {
 public:
     // Build a LinkGoTo from a destination (dictionary, name, or string).
@@ -242,7 +243,7 @@ private:
 // LinkURI
 //------------------------------------------------------------------------
 
-class LinkURI : public LinkAction
+class POPPLER_PRIVATE_EXPORT LinkURI : public LinkAction
 {
 public:
     // Build a LinkURI given the URI (string) and base URI.
@@ -498,7 +499,7 @@ private:
 // LinkResetForm
 //------------------------------------------------------------------------
 
-class LinkResetForm : public LinkAction
+class POPPLER_PRIVATE_EXPORT LinkResetForm : public LinkAction
 {
 public:
     // Build a LinkResetForm.
@@ -546,7 +547,7 @@ private:
 // Links
 //------------------------------------------------------------------------
 
-class Links
+class POPPLER_PRIVATE_EXPORT Links
 {
 public:
     // Extract links from array of annotations.
diff --git a/poppler/MarkedContentOutputDev.h b/poppler/MarkedContentOutputDev.h
index 00d477d1..b1d37649 100644
--- a/poppler/MarkedContentOutputDev.h
+++ b/poppler/MarkedContentOutputDev.h
@@ -13,6 +13,7 @@
 #define MARKEDCONTENTOUTPUTDEV_H
 
 #include "goo/gmem.h"
+#include "poppler_private_export.h"
 #include "OutputDev.h"
 #include "GfxState.h"
 #include "GfxFont.h"
@@ -84,7 +85,7 @@ private:
 
 typedef std::vector<TextSpan> TextSpanArray;
 
-class MarkedContentOutputDev : public OutputDev
+class POPPLER_PRIVATE_EXPORT MarkedContentOutputDev : public OutputDev
 {
 public:
     MarkedContentOutputDev(int mcidA);
diff --git a/poppler/Movie.h b/poppler/Movie.h
index 596be189..afc337e2 100644
--- a/poppler/Movie.h
+++ b/poppler/Movie.h
@@ -26,6 +26,7 @@
 #define _MOVIE_H_
 
 #include "Object.h"
+#include "poppler_private_export.h"
 
 struct MovieActivationParameters
 {
@@ -71,7 +72,7 @@ struct MovieActivationParameters
     int zdenum; // 1
 };
 
-class Movie
+class POPPLER_PRIVATE_EXPORT Movie
 {
 public:
     Movie(const Object *movieDict, const Object *aDict);
diff --git a/poppler/Object.h b/poppler/Object.h
index 104a95b1..1ce75211 100644
--- a/poppler/Object.h
+++ b/poppler/Object.h
@@ -43,6 +43,7 @@
 #include "goo/GooString.h"
 #include "goo/GooLikely.h"
 #include "Error.h"
+#include "poppler_private_export.h"
 
 #define OBJECT_TYPE_CHECK(wanted_type)                                                                                                                                                                                                         \
     if (unlikely(type != wanted_type)) {                                                                                                                                                                                                       \
@@ -162,7 +163,7 @@ constexpr int numObjTypes = 17; // total number of object types
 // Object
 //------------------------------------------------------------------------
 
-class Object
+class POPPLER_PRIVATE_EXPORT Object
 {
 public:
     Object() : type(objNone) { }
diff --git a/poppler/OptionalContent.h b/poppler/OptionalContent.h
index d3d02e68..3ab5f646 100644
--- a/poppler/OptionalContent.h
+++ b/poppler/OptionalContent.h
@@ -17,6 +17,7 @@
 
 #include "Object.h"
 #include "CharTypes.h"
+#include "poppler_private_export.h"
 #include <unordered_map>
 #include <memory>
 
@@ -27,7 +28,7 @@ class OptionalContentGroup;
 
 //------------------------------------------------------------------------
 
-class OCGs
+class POPPLER_PRIVATE_EXPORT OCGs
 {
 public:
     OCGs(Object *ocgObject, XRef *xref);
@@ -66,7 +67,7 @@ private:
 
 //------------------------------------------------------------------------
 
-class OptionalContentGroup
+class POPPLER_PRIVATE_EXPORT OptionalContentGroup
 {
 public:
     enum State
diff --git a/poppler/Outline.h b/poppler/Outline.h
index 2e22fb54..e1e0ba8e 100644
--- a/poppler/Outline.h
+++ b/poppler/Outline.h
@@ -28,6 +28,7 @@
 #include <memory>
 #include "Object.h"
 #include "CharTypes.h"
+#include "poppler_private_export.h"
 
 class GooString;
 class XRef;
@@ -53,7 +54,7 @@ private:
 
 //------------------------------------------------------------------------
 
-class OutlineItem
+class POPPLER_PRIVATE_EXPORT OutlineItem
 {
 public:
     OutlineItem(const Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA);
diff --git a/poppler/OutputDev.h b/poppler/OutputDev.h
index 024764a6..3a8430c8 100644
--- a/poppler/OutputDev.h
+++ b/poppler/OutputDev.h
@@ -37,6 +37,7 @@
 #define OUTPUTDEV_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "CharTypes.h"
 #include "Object.h"
 #include "PopplerCache.h"
@@ -61,7 +62,7 @@ class Function;
 // OutputDev
 //------------------------------------------------------------------------
 
-class OutputDev
+class POPPLER_PRIVATE_EXPORT OutputDev
 {
 public:
     // Constructor.
diff --git a/poppler/PDFDoc.h b/poppler/PDFDoc.h
index 5ab1fb21..a9ce2bd3 100644
--- a/poppler/PDFDoc.h
+++ b/poppler/PDFDoc.h
@@ -46,6 +46,7 @@
 #include <mutex>
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include <cstdio>
 #include "XRef.h"
 #include "Catalog.h"
@@ -117,7 +118,7 @@ enum PDFSubtypeConformance
 // PDFDoc
 //------------------------------------------------------------------------
 
-class PDFDoc
+class POPPLER_PRIVATE_EXPORT PDFDoc
 {
 public:
     PDFDoc(const GooString *fileNameA, const GooString *ownerPassword = nullptr, const GooString *userPassword = nullptr, void *guiDataA = nullptr);
diff --git a/poppler/PDFDocEncoding.h b/poppler/PDFDocEncoding.h
index 7117268e..01f38158 100644
--- a/poppler/PDFDocEncoding.h
+++ b/poppler/PDFDocEncoding.h
@@ -28,11 +28,12 @@
 #include <string>
 
 #include "CharTypes.h"
+#include "poppler_private_export.h"
 
 class GooString;
 
-extern const Unicode pdfDocEncoding[256];
+extern const Unicode POPPLER_PRIVATE_EXPORT pdfDocEncoding[256];
 
-char *pdfDocEncodingToUTF16(const std::string &orig, int *length);
+char POPPLER_PRIVATE_EXPORT *pdfDocEncodingToUTF16(const std::string &orig, int *length);
 
 #endif
diff --git a/poppler/PDFDocFactory.h b/poppler/PDFDocFactory.h
index 92a66d7e..584f34a3 100644
--- a/poppler/PDFDocFactory.h
+++ b/poppler/PDFDocFactory.h
@@ -16,6 +16,7 @@
 #include <memory>
 
 #include "PDFDoc.h"
+#include "poppler_private_export.h"
 
 class GooString;
 class PDFDocBuilder;
@@ -32,7 +33,7 @@ class PDFDocBuilder;
 // the constructor, or by registering a new PDFDocBuilder afterwards.
 //------------------------------------------------------------------------
 
-class PDFDocFactory
+class POPPLER_PRIVATE_EXPORT PDFDocFactory
 {
 
 public:
diff --git a/poppler/PSOutputDev.h b/poppler/PSOutputDev.h
index 9acaee91..549d778d 100644
--- a/poppler/PSOutputDev.h
+++ b/poppler/PSOutputDev.h
@@ -38,6 +38,7 @@
 #define PSOUTPUTDEV_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include <cstddef>
 #include "Object.h"
 #include "GfxState.h"
@@ -115,7 +116,7 @@ typedef void (*PSOutputFunc)(void *stream, const char *data, int len);
 
 typedef GooString *(*PSOutCustomCodeCbk)(PSOutputDev *psOut, PSOutCustomCodeLocation loc, int n, void *data);
 
-class PSOutputDev : public OutputDev
+class POPPLER_PRIVATE_EXPORT PSOutputDev : public OutputDev
 {
 public:
     // Open a PostScript output file, and write the prolog.
diff --git a/poppler/Page.h b/poppler/Page.h
index b0cc8a1c..68126306 100644
--- a/poppler/Page.h
+++ b/poppler/Page.h
@@ -40,6 +40,7 @@
 
 #include "poppler-config.h"
 #include "Object.h"
+#include "poppler_private_export.h"
 
 class Dict;
 class PDFDoc;
@@ -135,7 +136,7 @@ private:
 // Page
 //------------------------------------------------------------------------
 
-class Page
+class POPPLER_PRIVATE_EXPORT Page
 {
 public:
     // Constructor.
diff --git a/poppler/PageTransition.h b/poppler/PageTransition.h
index 5da48195..0e0a8510 100644
--- a/poppler/PageTransition.h
+++ b/poppler/PageTransition.h
@@ -58,7 +58,7 @@ enum PageTransitionDirection
     transitionOutward
 };
 
-class PageTransition
+class POPPLER_PRIVATE_EXPORT PageTransition
 {
 public:
     // Construct a Page Transition.
diff --git a/poppler/Parser.h b/poppler/Parser.h
index 1a5fc643..b379b67d 100644
--- a/poppler/Parser.h
+++ b/poppler/Parser.h
@@ -33,7 +33,7 @@
 // Parser
 //------------------------------------------------------------------------
 
-class Parser
+class POPPLER_PRIVATE_EXPORT Parser
 {
 public:
     // Constructor.
diff --git a/poppler/Rendition.h b/poppler/Rendition.h
index 2667c7a7..97ca5b91 100644
--- a/poppler/Rendition.h
+++ b/poppler/Rendition.h
@@ -118,7 +118,7 @@ struct MediaParameters
     MediaWindowParameters windowParams;
 };
 
-class MediaRendition
+class POPPLER_PRIVATE_EXPORT MediaRendition
 {
 public:
     MediaRendition(Object *obj);
diff --git a/poppler/SignatureHandler.h b/poppler/SignatureHandler.h
index d55f1c84..c4d24c92 100644
--- a/poppler/SignatureHandler.h
+++ b/poppler/SignatureHandler.h
@@ -21,6 +21,7 @@
 #include "goo/GooString.h"
 #include "SignatureInfo.h"
 #include "CertificateInfo.h"
+#include "poppler_private_export.h"
 
 #include <vector>
 #include <functional>
@@ -38,7 +39,7 @@
 #include <secmodt.h>
 #include <sechash.h>
 
-class SignatureHandler
+class POPPLER_PRIVATE_EXPORT SignatureHandler
 {
 public:
     explicit SignatureHandler();
diff --git a/poppler/SignatureInfo.h b/poppler/SignatureInfo.h
index 75d414eb..3ea2a05b 100644
--- a/poppler/SignatureInfo.h
+++ b/poppler/SignatureInfo.h
@@ -19,6 +19,8 @@
 #include <memory>
 #include <ctime>
 
+#include "poppler_private_export.h"
+
 enum SignatureValidationStatus
 {
     SIGNATURE_VALID,
@@ -43,7 +45,7 @@ enum CertificateValidationStatus
 
 class X509CertificateInfo;
 
-class SignatureInfo
+class POPPLER_PRIVATE_EXPORT SignatureInfo
 {
 public:
     SignatureInfo();
diff --git a/poppler/Sound.h b/poppler/Sound.h
index 6fe6a875..ee34b77e 100644
--- a/poppler/Sound.h
+++ b/poppler/Sound.h
@@ -42,7 +42,7 @@ enum SoundEncoding
     soundALaw // A-law-encoded samples
 };
 
-class Sound
+class POPPLER_PRIVATE_EXPORT Sound
 {
 public:
     // Try to parse the Object obj
diff --git a/poppler/SplashOutputDev.h b/poppler/SplashOutputDev.h
index f0b5028b..544ac14c 100644
--- a/poppler/SplashOutputDev.h
+++ b/poppler/SplashOutputDev.h
@@ -35,6 +35,7 @@
 #include "splash/SplashTypes.h"
 #include "splash/SplashPattern.h"
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "OutputDev.h"
 #include "GfxState.h"
 #include "GlobalParams.h"
@@ -189,7 +190,7 @@ private:
 // SplashOutputDev
 //------------------------------------------------------------------------
 
-class SplashOutputDev : public OutputDev
+class POPPLER_PRIVATE_EXPORT SplashOutputDev : public OutputDev
 {
 public:
     // Constructor.
diff --git a/poppler/Stream.h b/poppler/Stream.h
index 10028e40..f4d4b586 100644
--- a/poppler/Stream.h
+++ b/poppler/Stream.h
@@ -43,6 +43,7 @@
 #include <cstdio>
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "Object.h"
 
 class GooFile;
@@ -103,7 +104,7 @@ typedef struct _ByteRange
 // Stream (base class)
 //------------------------------------------------------------------------
 
-class Stream
+class POPPLER_PRIVATE_EXPORT Stream
 {
 public:
     // Constructor.
@@ -266,7 +267,7 @@ private:
 //
 // This is the base class for all streams that output to a file
 //------------------------------------------------------------------------
-class OutStream
+class POPPLER_PRIVATE_EXPORT OutStream
 {
 public:
     // Constructor.
@@ -293,7 +294,7 @@ public:
 //------------------------------------------------------------------------
 // FileOutStream
 //------------------------------------------------------------------------
-class FileOutStream : public OutStream
+class POPPLER_PRIVATE_EXPORT FileOutStream : public OutStream
 {
 public:
     FileOutStream(FILE *fa, Goffset startA);
@@ -319,7 +320,7 @@ private:
 // This is the base class for all streams that read directly from a file.
 //------------------------------------------------------------------------
 
-class BaseStream : public Stream
+class POPPLER_PRIVATE_EXPORT BaseStream : public Stream
 {
 public:
     // TODO Mirar si puedo hacer que dictA sea un puntero
@@ -349,7 +350,7 @@ protected:
 // BaseInputStream
 //------------------------------------------------------------------------
 
-class BaseSeekInputStream : public BaseStream
+class POPPLER_PRIVATE_EXPORT BaseSeekInputStream : public BaseStream
 {
 public:
     // This enum is used to tell the seek() method how it must reposition
@@ -430,7 +431,7 @@ protected:
 // ImageStream
 //------------------------------------------------------------------------
 
-class ImageStream
+class POPPLER_PRIVATE_EXPORT ImageStream
 {
 public:
     // Create an image stream object for an image with the specified
@@ -586,7 +587,7 @@ private:
 
 #define cachedStreamBufSize 1024
 
-class CachedFileStream : public BaseStream
+class POPPLER_PRIVATE_EXPORT CachedFileStream : public BaseStream
 {
 public:
     CachedFileStream(CachedFile *ccA, Goffset startA, bool limitedA, Goffset lengthA, Object &&dictA);
@@ -724,7 +725,7 @@ private:
     T *bufPtr;
 };
 
-class MemStream : public BaseMemStream<const char>
+class POPPLER_PRIVATE_EXPORT MemStream : public BaseMemStream<const char>
 {
 public:
     MemStream(const char *bufA, Goffset startA, Goffset lengthA, Object &&dictA) : BaseMemStream(bufA, startA, lengthA, std::move(dictA)) { }
@@ -748,7 +749,7 @@ public:
 // that creating a new FileStream (using makeSubStream).
 //------------------------------------------------------------------------
 
-class EmbedStream : public BaseStream
+class POPPLER_PRIVATE_EXPORT EmbedStream : public BaseStream
 {
 public:
     EmbedStream(Stream *strA, Object &&dictA, bool limitedA, Goffset lengthA, bool reusableA = false);
diff --git a/poppler/StructElement.h b/poppler/StructElement.h
index 73cf9a85..6c8e47e1 100644
--- a/poppler/StructElement.h
+++ b/poppler/StructElement.h
@@ -17,6 +17,7 @@
 #include "goo/GooString.h"
 #include "MarkedContentOutputDev.h"
 #include "Object.h"
+#include "poppler_private_export.h"
 #include <vector>
 #include <set>
 
@@ -25,7 +26,7 @@ class Dict;
 class StructElement;
 class StructTreeRoot;
 
-class Attribute
+class POPPLER_PRIVATE_EXPORT Attribute
 {
 public:
     enum Type
@@ -160,7 +161,7 @@ private:
     friend class StructElement;
 };
 
-class StructElement
+class POPPLER_PRIVATE_EXPORT StructElement
 {
 public:
     enum Type
diff --git a/poppler/TextOutputDev.h b/poppler/TextOutputDev.h
index ed52180a..2c39c67d 100644
--- a/poppler/TextOutputDev.h
+++ b/poppler/TextOutputDev.h
@@ -37,6 +37,7 @@
 #define TEXTOUTPUTDEV_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include <cstdio>
 #include "GfxFont.h"
 #include "GfxState.h"
@@ -83,7 +84,7 @@ enum EndOfLineKind
 // TextFontInfo
 //------------------------------------------------------------------------
 
-class TextFontInfo
+class POPPLER_PRIVATE_EXPORT TextFontInfo
 {
 public:
     TextFontInfo(const GfxState *state);
@@ -133,7 +134,7 @@ private:
 // TextWord
 //------------------------------------------------------------------------
 
-class TextWord
+class POPPLER_PRIVATE_EXPORT TextWord
 {
 public:
     // Constructor.
@@ -503,7 +504,7 @@ private:
 // TextWordList
 //------------------------------------------------------------------------
 
-class TextWordList
+class POPPLER_PRIVATE_EXPORT TextWordList
 {
 public:
     // Build a flat word list, in content stream order (if
@@ -551,7 +552,7 @@ private:
 // TextPage
 //------------------------------------------------------------------------
 
-class TextPage
+class POPPLER_PRIVATE_EXPORT TextPage
 {
 public:
     // Constructor.
@@ -708,7 +709,7 @@ private:
 // ActualText
 //------------------------------------------------------------------------
 
-class ActualText
+class POPPLER_PRIVATE_EXPORT ActualText
 {
 public:
     // Create an ActualText
@@ -737,7 +738,7 @@ private:
 // TextOutputDev
 //------------------------------------------------------------------------
 
-class TextOutputDev : public OutputDev
+class POPPLER_PRIVATE_EXPORT TextOutputDev : public OutputDev
 {
 public:
     // Open a text output file.  If <fileName> is NULL, no file is
diff --git a/poppler/UTF.h b/poppler/UTF.h
index c9d693c3..2e4cfe7f 100644
--- a/poppler/UTF.h
+++ b/poppler/UTF.h
@@ -20,6 +20,7 @@
 
 #include "goo/GooString.h"
 #include "CharTypes.h"
+#include "poppler_private_export.h"
 
 // Convert a UTF-16 string to a UCS-4
 //   utf16      - utf16 bytes
@@ -33,7 +34,7 @@ int UTF16toUCS4(const Unicode *utf16, int utf16Len, Unicode **ucs4_out);
 //   ucs4       - if the number of UCS-4 characters is > 0, allocates and
 //                returns UCS-4 string. Free with gfree.
 //   returns number of UCS-4 characters
-int TextStringToUCS4(const GooString *textStr, Unicode **ucs4);
+int POPPLER_PRIVATE_EXPORT TextStringToUCS4(const GooString *textStr, Unicode **ucs4);
 
 // check if UCS-4 character is valid
 bool UnicodeIsValid(Unicode ucs4);
@@ -45,7 +46,7 @@ bool UnicodeIsWhitespace(Unicode ucs4);
 // (excluding terminating NULL). Each invalid byte is counted as a
 // code point since the UTF-8 conversion functions will replace it with
 // REPLACEMENT_CHAR.
-int utf8CountUtf16CodeUnits(const char *utf8);
+int POPPLER_PRIVATE_EXPORT utf8CountUtf16CodeUnits(const char *utf8);
 
 // Convert UTF-8 to UTF-16
 //  utf8- UTF-8 string to convert. If not null terminated, set maxUtf8 to num
@@ -55,14 +56,14 @@ int utf8CountUtf16CodeUnits(const char *utf8);
 //  maxUtf8 - maximum number of UTF-8 bytes to convert. Conversion stops when
 //            either this count is reached or a null is encountered.
 // Returns number of UTF-16 code units written (excluding NULL).
-int utf8ToUtf16(const char *utf8, uint16_t *utf16, int maxUtf16 = INT_MAX, int maxUtf8 = INT_MAX);
+int POPPLER_PRIVATE_EXPORT utf8ToUtf16(const char *utf8, uint16_t *utf16, int maxUtf16 = INT_MAX, int maxUtf8 = INT_MAX);
 
 // Allocate utf16 string and convert utf8 into it.
-uint16_t *utf8ToUtf16(const char *utf8, int *len = nullptr);
+uint16_t POPPLER_PRIVATE_EXPORT *utf8ToUtf16(const char *utf8, int *len = nullptr);
 
 // Count number of UTF-8 bytes required to convert a UTF-16 string to
 // UTF-8 (excluding terminating NULL).
-int utf16CountUtf8Bytes(const uint16_t *utf16);
+int POPPLER_PRIVATE_EXPORT utf16CountUtf8Bytes(const uint16_t *utf16);
 
 // Convert UTF-16 to UTF-8
 //  utf16- UTF-16 string to convert. If not null terminated, set maxUtf16 to num
@@ -72,10 +73,10 @@ int utf16CountUtf8Bytes(const uint16_t *utf16);
 //  maxUtf16 - maximum number of UTF-16 code units to convert. Conversion stops when
 //            either this count is reached or a null is encountered.
 // Returns number of UTF-8 bytes written (excluding NULL).
-int utf16ToUtf8(const uint16_t *utf16, char *utf8, int maxUtf8 = INT_MAX, int maxUtf16 = INT_MAX);
+int POPPLER_PRIVATE_EXPORT utf16ToUtf8(const uint16_t *utf16, char *utf8, int maxUtf8 = INT_MAX, int maxUtf16 = INT_MAX);
 
 // Allocate utf8 string and convert utf16 into it.
-char *utf16ToUtf8(const uint16_t *utf16, int *len = nullptr);
+char POPPLER_PRIVATE_EXPORT *utf16ToUtf8(const uint16_t *utf16, int *len = nullptr);
 
 // Convert a UCS-4 string to pure ASCII (7bit)
 //   in       - UCS-4 string bytes
@@ -88,6 +89,6 @@ char *utf16ToUtf8(const uint16_t *utf16, int *len = nullptr);
 //              of length @out_len + 1, for each character in the ascii string giving the index
 //              of the corresponding character in the text of the line (thanks to this info
 //              being passed in @in_idx parameter).
-void unicodeToAscii7(const Unicode *in, int len, Unicode **ucs4_out, int *out_len, const int *in_idx, int **indices);
+void POPPLER_PRIVATE_EXPORT unicodeToAscii7(const Unicode *in, int len, Unicode **ucs4_out, int *out_len, const int *in_idx, int **indices);
 
 #endif
diff --git a/poppler/UnicodeMap.h b/poppler/UnicodeMap.h
index 3093333a..9ec22c4c 100644
--- a/poppler/UnicodeMap.h
+++ b/poppler/UnicodeMap.h
@@ -29,6 +29,7 @@
 #define UNICODEMAP_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "CharTypes.h"
 
 #include <atomic>
@@ -56,7 +57,7 @@ struct UnicodeMapExt;
 
 //------------------------------------------------------------------------
 
-class UnicodeMap
+class POPPLER_PRIVATE_EXPORT UnicodeMap
 {
 public:
     // Create the UnicodeMap specified by <encodingName>.  Sets the
diff --git a/poppler/UnicodeMapFuncs.h b/poppler/UnicodeMapFuncs.h
index 8f35293a..bace0a62 100644
--- a/poppler/UnicodeMapFuncs.h
+++ b/poppler/UnicodeMapFuncs.h
@@ -28,7 +28,7 @@
 
 #include "UTF.h"
 
-int mapUTF8(Unicode u, char *buf, int bufSize);
+int POPPLER_PRIVATE_EXPORT mapUTF8(Unicode u, char *buf, int bufSize);
 
 int mapUTF16(Unicode u, char *buf, int bufSize);
 
diff --git a/poppler/UnicodeTypeTable.h b/poppler/UnicodeTypeTable.h
index 064cda38..85d88d62 100644
--- a/poppler/UnicodeTypeTable.h
+++ b/poppler/UnicodeTypeTable.h
@@ -28,6 +28,7 @@
 #define UNICODETYPETABLE_H
 
 #include "CharTypes.h"
+#include "poppler_private_export.h"
 
 extern bool unicodeTypeL(Unicode c);
 
@@ -41,8 +42,8 @@ extern bool unicodeIsAlphabeticPresentationForm(Unicode c);
 
 extern Unicode unicodeToUpper(Unicode c);
 
-extern Unicode *unicodeNormalizeNFKC(const Unicode *in, int len, int *out_len, int **indices);
+extern Unicode POPPLER_PRIVATE_EXPORT *unicodeNormalizeNFKC(const Unicode *in, int len, int *out_len, int **indices);
 
-extern Unicode *unicodeNormalizeNFKC(const Unicode *in, int len, int *out_len, int **indices, bool reverseRTL);
+extern Unicode POPPLER_PRIVATE_EXPORT *unicodeNormalizeNFKC(const Unicode *in, int len, int *out_len, int **indices, bool reverseRTL);
 
 #endif
diff --git a/poppler/XRef.h b/poppler/XRef.h
index c18ff548..1b050f8e 100644
--- a/poppler/XRef.h
+++ b/poppler/XRef.h
@@ -35,6 +35,7 @@
 #define XREF_H
 
 #include "poppler-config.h"
+#include "poppler_private_export.h"
 #include "Object.h"
 #include "Stream.h"
 #include "PopplerCache.h"
@@ -92,7 +93,7 @@ struct XRefEntry
     }
 };
 
-class XRef
+class POPPLER_PRIVATE_EXPORT XRef
 {
 public:
     // Constructor, create an empty XRef, used for PDF writing
diff --git a/qt5/demos/CMakeLists.txt b/qt5/demos/CMakeLists.txt
index fc5ae601..37374bba 100644
--- a/qt5/demos/CMakeLists.txt
+++ b/qt5/demos/CMakeLists.txt
@@ -2,6 +2,7 @@ include_directories(
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_SOURCE_DIR}/../src
   ${CMAKE_CURRENT_BINARY_DIR}
+  ${CMAKE_CURRENT_BINARY_DIR}/../src
 )
 
 set(poppler_qt5viewer_SRCS
diff --git a/qt5/src/CMakeLists.txt b/qt5/src/CMakeLists.txt
index afacd2c3..1212bb84 100644
--- a/qt5/src/CMakeLists.txt
+++ b/qt5/src/CMakeLists.txt
@@ -37,6 +37,7 @@ set(poppler_qt5_SRCS
   poppler-version.cpp
 )
 add_library(poppler-qt5 ${poppler_qt5_SRCS})
+generate_export_header(poppler-qt5 BASE_NAME poppler-qt5 EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler-export.h")
 set_target_properties(poppler-qt5 PROPERTIES VERSION 1.27.0 SOVERSION 1)
 if(MINGW AND BUILD_SHARED_LIBS)
     get_target_property(POPPLER_QT5_SOVERSION poppler-qt5 SOVERSION)
@@ -60,9 +61,9 @@ install(FILES
   poppler-annotation.h
   poppler-form.h
   poppler-optcontent.h
-  poppler-export.h
   poppler-page-transition.h
   poppler-media.h
+  ${CMAKE_CURRENT_BINARY_DIR}/poppler-export.h
   ${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h
   DESTINATION include/poppler/qt5)
 
diff --git a/qt5/src/poppler-export.h b/qt5/src/poppler-export.h
deleted file mode 100644
index 597eccf1..00000000
--- a/qt5/src/poppler-export.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * This file is used to set the poppler_qt5_EXPORT macros right.
- * This is needed for setting the visibility on windows, it will have no effect on other platforms.
- */
-#if defined(_WIN32)
-#    define _POPPLER_QT5_LIB_EXPORT __declspec(dllexport)
-#    define _POPPLER_QT5_LIB_IMPORT __declspec(dllimport)
-#elif defined(__GNUC__)
-#    define _POPPLER_QT5_LIB_EXPORT __attribute__((visibility("default")))
-#    define _POPPLER_QT5_LIB_IMPORT
-#else
-#    define _POPPLER_QT5_LIB_EXPORT
-#    define _POPPLER_QT5_LIB_IMPORT
-#endif
-
-#ifdef poppler_qt5_EXPORTS
-#    define POPPLER_QT5_EXPORT _POPPLER_QT5_LIB_EXPORT
-#else
-#    define POPPLER_QT5_EXPORT _POPPLER_QT5_LIB_IMPORT
-#endif
diff --git a/qt5/tests/CMakeLists.txt b/qt5/tests/CMakeLists.txt
index 82ef2139..c3decb92 100644
--- a/qt5/tests/CMakeLists.txt
+++ b/qt5/tests/CMakeLists.txt
@@ -4,6 +4,7 @@ include_directories(
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_SOURCE_DIR}/../src
   ${CMAKE_CURRENT_BINARY_DIR}
+  ${CMAKE_CURRENT_BINARY_DIR}/../src
 )
 
 macro(QT5_ADD_SIMPLETEST exe source)
diff --git a/qt6/demos/CMakeLists.txt b/qt6/demos/CMakeLists.txt
index 692a2714..f7c770aa 100644
--- a/qt6/demos/CMakeLists.txt
+++ b/qt6/demos/CMakeLists.txt
@@ -2,6 +2,7 @@ include_directories(
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_SOURCE_DIR}/../src
   ${CMAKE_CURRENT_BINARY_DIR}
+  ${CMAKE_CURRENT_BINARY_DIR}/../src
 )
 
 set(poppler_qt6viewer_SRCS
diff --git a/qt6/src/CMakeLists.txt b/qt6/src/CMakeLists.txt
index a4cf8323..7fecbc23 100644
--- a/qt6/src/CMakeLists.txt
+++ b/qt6/src/CMakeLists.txt
@@ -37,6 +37,7 @@ set(poppler_qt6_SRCS
   poppler-version.cpp
 )
 add_library(poppler-qt6 ${poppler_qt6_SRCS})
+generate_export_header(poppler-qt6 BASE_NAME poppler-qt6 EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler-export.h")
 set_target_properties(poppler-qt6 PROPERTIES VERSION 1.1.0 SOVERSION 1)
 if(MINGW AND BUILD_SHARED_LIBS)
     get_target_property(POPPLER_QT6_SOVERSION poppler-qt6 SOVERSION)
@@ -60,9 +61,9 @@ install(FILES
   poppler-annotation.h
   poppler-form.h
   poppler-optcontent.h
-  poppler-export.h
   poppler-page-transition.h
   poppler-media.h
+  ${CMAKE_CURRENT_BINARY_DIR}/poppler-export.h
   ${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h
   DESTINATION include/poppler/qt6)
 
diff --git a/qt6/src/poppler-export.h b/qt6/src/poppler-export.h
deleted file mode 100644
index 29eca234..00000000
--- a/qt6/src/poppler-export.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * This file is used to set the poppler_qt6_EXPORT macros right.
- * This is needed for setting the visibility on windows, it will have no effect on other platforms.
- */
-#if defined(_WIN32)
-#    define _POPPLER_QT6_LIB_EXPORT __declspec(dllexport)
-#    define _POPPLER_QT6_LIB_IMPORT __declspec(dllimport)
-#elif defined(__GNUC__)
-#    define _POPPLER_QT6_LIB_EXPORT __attribute__((visibility("default")))
-#    define _POPPLER_QT6_LIB_IMPORT
-#else
-#    define _POPPLER_QT6_LIB_EXPORT
-#    define _POPPLER_QT6_LIB_IMPORT
-#endif
-
-#ifdef poppler_qt6_EXPORTS
-#    define POPPLER_QT6_EXPORT _POPPLER_QT6_LIB_EXPORT
-#else
-#    define POPPLER_QT6_EXPORT _POPPLER_QT6_LIB_IMPORT
-#endif
diff --git a/qt6/tests/CMakeLists.txt b/qt6/tests/CMakeLists.txt
index 7f9e749e..72cc4860 100644
--- a/qt6/tests/CMakeLists.txt
+++ b/qt6/tests/CMakeLists.txt
@@ -4,6 +4,7 @@ include_directories(
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_SOURCE_DIR}/../src
   ${CMAKE_CURRENT_BINARY_DIR}
+  ${CMAKE_CURRENT_BINARY_DIR}/../src
 )
 
 macro(QT6_ADD_SIMPLETEST exe source)
diff --git a/splash/Splash.h b/splash/Splash.h
index d1dad3b1..68f27ae6 100644
--- a/splash/Splash.h
+++ b/splash/Splash.h
@@ -31,6 +31,7 @@
 #include "SplashTypes.h"
 #include "SplashClip.h"
 #include "SplashPattern.h"
+#include "poppler_private_export.h"
 
 class SplashBitmap;
 struct SplashGlyphBitmap;
@@ -78,7 +79,7 @@ enum SplashPipeResultColorCtrl
 // Splash
 //------------------------------------------------------------------------
 
-class Splash
+class POPPLER_PRIVATE_EXPORT Splash
 {
 public:
     // Create a new rasterizer object.
diff --git a/splash/SplashBitmap.h b/splash/SplashBitmap.h
index 454f0519..9586f328 100644
--- a/splash/SplashBitmap.h
+++ b/splash/SplashBitmap.h
@@ -35,6 +35,7 @@
 
 #include "SplashTypes.h"
 #include "poppler/GfxState.h"
+#include "poppler_private_export.h"
 #include <cstdio>
 
 class ImgWriter;
@@ -43,7 +44,7 @@ class ImgWriter;
 // SplashBitmap
 //------------------------------------------------------------------------
 
-class SplashBitmap
+class POPPLER_PRIVATE_EXPORT SplashBitmap
 {
 public:
     // Create a new bitmap.  It will have <widthA> x <heightA> pixels in
diff --git a/splash/SplashPath.h b/splash/SplashPath.h
index 1d1de3fd..e04d67af 100644
--- a/splash/SplashPath.h
+++ b/splash/SplashPath.h
@@ -23,6 +23,7 @@
 #define SPLASHPATH_H
 
 #include "SplashTypes.h"
+#include "poppler_private_export.h"
 
 //------------------------------------------------------------------------
 // SplashPathPoint
@@ -64,7 +65,7 @@ struct SplashPathHint
 // SplashPath
 //------------------------------------------------------------------------
 
-class SplashPath
+class POPPLER_PRIVATE_EXPORT SplashPath
 {
 public:
     // Create an empty path.
diff --git a/splash/SplashPattern.h b/splash/SplashPattern.h
index dd12466e..83de32db 100644
--- a/splash/SplashPattern.h
+++ b/splash/SplashPattern.h
@@ -23,6 +23,7 @@
 #define SPLASHPATTERN_H
 
 #include "SplashTypes.h"
+#include "poppler_private_export.h"
 
 class SplashScreen;
 
@@ -62,7 +63,7 @@ private:
 // SplashSolidColor
 //------------------------------------------------------------------------
 
-class SplashSolidColor : public SplashPattern
+class POPPLER_PRIVATE_EXPORT SplashSolidColor : public SplashPattern
 {
 public:
     SplashSolidColor(SplashColorPtr colorA);


More information about the poppler mailing list