Commit 32e30a3af2f3198e1522a42bdde8faa1cd1a88df
1 parent
b90adb1c
Resolve QPDF{Name,Number} tree helper linker issues (fixes #745)
This is a guess...I'm not sure exactly why there are linker issues or how to reproduce them.
Showing
4 changed files
with
22 additions
and
8 deletions
include/qpdf/QPDFNameTreeObjectHelper.hh
| @@ -42,7 +42,7 @@ class NNTreeImpl; | @@ -42,7 +42,7 @@ class NNTreeImpl; | ||
| 42 | class NNTreeIterator; | 42 | class NNTreeIterator; |
| 43 | class NNTreeDetails; | 43 | class NNTreeDetails; |
| 44 | 44 | ||
| 45 | -class QPDFNameTreeObjectHelper: public QPDFObjectHelper | 45 | +class QPDF_DLL_CLASS QPDFNameTreeObjectHelper: public QPDFObjectHelper |
| 46 | { | 46 | { |
| 47 | public: | 47 | public: |
| 48 | // The qpdf object is required so that this class can issue | 48 | // The qpdf object is required so that this class can issue |
| @@ -55,7 +55,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper | @@ -55,7 +55,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper | ||
| 55 | static QPDFNameTreeObjectHelper newEmpty(QPDF&, bool auto_repair = true); | 55 | static QPDFNameTreeObjectHelper newEmpty(QPDF&, bool auto_repair = true); |
| 56 | 56 | ||
| 57 | QPDF_DLL | 57 | QPDF_DLL |
| 58 | - virtual ~QPDFNameTreeObjectHelper() = default; | 58 | + virtual ~QPDFNameTreeObjectHelper(); |
| 59 | 59 | ||
| 60 | // Return whether the number tree has an explicit entry for this | 60 | // Return whether the number tree has an explicit entry for this |
| 61 | // number. | 61 | // number. |
| @@ -67,7 +67,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper | @@ -67,7 +67,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper | ||
| 67 | QPDF_DLL | 67 | QPDF_DLL |
| 68 | bool findObject(std::string const& utf8, QPDFObjectHandle& oh); | 68 | bool findObject(std::string const& utf8, QPDFObjectHandle& oh); |
| 69 | 69 | ||
| 70 | - class iterator | 70 | + class QPDF_DLL_PRIVATE iterator |
| 71 | { | 71 | { |
| 72 | friend class QPDFNameTreeObjectHelper; | 72 | friend class QPDFNameTreeObjectHelper; |
| 73 | 73 | ||
| @@ -181,7 +181,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper | @@ -181,7 +181,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper | ||
| 181 | void setSplitThreshold(int); | 181 | void setSplitThreshold(int); |
| 182 | 182 | ||
| 183 | private: | 183 | private: |
| 184 | - class Members | 184 | + class QPDF_DLL_PRIVATE Members |
| 185 | { | 185 | { |
| 186 | friend class QPDFNameTreeObjectHelper; | 186 | friend class QPDFNameTreeObjectHelper; |
| 187 | 187 |
include/qpdf/QPDFNumberTreeObjectHelper.hh
| @@ -39,7 +39,7 @@ class NNTreeImpl; | @@ -39,7 +39,7 @@ class NNTreeImpl; | ||
| 39 | class NNTreeIterator; | 39 | class NNTreeIterator; |
| 40 | class NNTreeDetails; | 40 | class NNTreeDetails; |
| 41 | 41 | ||
| 42 | -class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | 42 | +class QPDF_DLL_CLASS QPDFNumberTreeObjectHelper: public QPDFObjectHelper |
| 43 | { | 43 | { |
| 44 | public: | 44 | public: |
| 45 | // The qpdf object is required so that this class can issue | 45 | // The qpdf object is required so that this class can issue |
| @@ -49,7 +49,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | @@ -49,7 +49,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | ||
| 49 | QPDFObjectHandle, QPDF&, bool auto_repair = true); | 49 | QPDFObjectHandle, QPDF&, bool auto_repair = true); |
| 50 | 50 | ||
| 51 | QPDF_DLL | 51 | QPDF_DLL |
| 52 | - virtual ~QPDFNumberTreeObjectHelper() = default; | 52 | + virtual ~QPDFNumberTreeObjectHelper(); |
| 53 | 53 | ||
| 54 | // Create an empty number tree | 54 | // Create an empty number tree |
| 55 | QPDF_DLL | 55 | QPDF_DLL |
| @@ -85,7 +85,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | @@ -85,7 +85,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | ||
| 85 | bool findObjectAtOrBelow( | 85 | bool findObjectAtOrBelow( |
| 86 | numtree_number idx, QPDFObjectHandle& oh, numtree_number& offset); | 86 | numtree_number idx, QPDFObjectHandle& oh, numtree_number& offset); |
| 87 | 87 | ||
| 88 | - class iterator | 88 | + class QPDF_DLL_PRIVATE iterator |
| 89 | { | 89 | { |
| 90 | friend class QPDFNumberTreeObjectHelper; | 90 | friend class QPDFNumberTreeObjectHelper; |
| 91 | 91 | ||
| @@ -200,7 +200,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | @@ -200,7 +200,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper | ||
| 200 | void setSplitThreshold(int); | 200 | void setSplitThreshold(int); |
| 201 | 201 | ||
| 202 | private: | 202 | private: |
| 203 | - class Members | 203 | + class QPDF_DLL_PRIVATE Members |
| 204 | { | 204 | { |
| 205 | friend class QPDFNumberTreeObjectHelper; | 205 | friend class QPDFNumberTreeObjectHelper; |
| 206 | typedef QPDFNumberTreeObjectHelper::numtree_number numtree_number; | 206 | typedef QPDFNumberTreeObjectHelper::numtree_number numtree_number; |
libqpdf/QPDFNameTreeObjectHelper.cc
| @@ -34,6 +34,13 @@ namespace | @@ -34,6 +34,13 @@ namespace | ||
| 34 | 34 | ||
| 35 | static NameTreeDetails name_tree_details; | 35 | static NameTreeDetails name_tree_details; |
| 36 | 36 | ||
| 37 | +QPDFNameTreeObjectHelper::~QPDFNameTreeObjectHelper() | ||
| 38 | +{ | ||
| 39 | + // Must be explicit and not inline -- see QPDF_DLL_CLASS in | ||
| 40 | + // README-maintainer. For this specific class, see github issue | ||
| 41 | + // #745. | ||
| 42 | +} | ||
| 43 | + | ||
| 37 | QPDFNameTreeObjectHelper::Members::Members( | 44 | QPDFNameTreeObjectHelper::Members::Members( |
| 38 | QPDFObjectHandle& oh, QPDF& q, bool auto_repair) : | 45 | QPDFObjectHandle& oh, QPDF& q, bool auto_repair) : |
| 39 | impl(std::make_shared<NNTreeImpl>(name_tree_details, q, oh, auto_repair)) | 46 | impl(std::make_shared<NNTreeImpl>(name_tree_details, q, oh, auto_repair)) |
libqpdf/QPDFNumberTreeObjectHelper.cc
| @@ -35,6 +35,13 @@ namespace | @@ -35,6 +35,13 @@ namespace | ||
| 35 | 35 | ||
| 36 | static NumberTreeDetails number_tree_details; | 36 | static NumberTreeDetails number_tree_details; |
| 37 | 37 | ||
| 38 | +QPDFNumberTreeObjectHelper::~QPDFNumberTreeObjectHelper() | ||
| 39 | +{ | ||
| 40 | + // Must be explicit and not inline -- see QPDF_DLL_CLASS in | ||
| 41 | + // README-maintainer. For this specific class, see github issue | ||
| 42 | + // #745. | ||
| 43 | +} | ||
| 44 | + | ||
| 38 | QPDFNumberTreeObjectHelper::Members::Members( | 45 | QPDFNumberTreeObjectHelper::Members::Members( |
| 39 | QPDFObjectHandle& oh, QPDF& q, bool auto_repair) : | 46 | QPDFObjectHandle& oh, QPDF& q, bool auto_repair) : |
| 40 | impl(std::make_shared<NNTreeImpl>(number_tree_details, q, oh, auto_repair)) | 47 | impl(std::make_shared<NNTreeImpl>(number_tree_details, q, oh, auto_repair)) |