Make getDefaultWireFormat call newInitialDefaultWireFormat if needed, instead of relying on a static initializer.
diff --git a/ndn-cpp/encoding/WireFormat.cpp b/ndn-cpp/encoding/WireFormat.cpp
index ba5772f..e208b82 100644
--- a/ndn-cpp/encoding/WireFormat.cpp
+++ b/ndn-cpp/encoding/WireFormat.cpp
@@ -10,9 +10,22 @@
namespace ndn {
-ptr_lib::shared_ptr<WireFormat> WireFormat::initialDefaultWireFormat_(newInitialDefaultWireFormat());
+ptr_lib::shared_ptr<WireFormat> WireFormat::initialDefaultWireFormat_;
-WireFormat *WireFormat::defaultWireFormat_ = initialDefaultWireFormat_.get();
+WireFormat *WireFormat::defaultWireFormat_ = 0;
+
+WireFormat *WireFormat::getDefaultWireFormat()
+{
+ if (!defaultWireFormat_ && !initialDefaultWireFormat_) {
+ // There is no defaultWireFormat_ and we have not yet initialized initialDefaultWireFormat_, so initialize and use it.
+ // NOTE: This could have been done with a static initializer on initialDefaultWireFormat_, but this does not have
+ // good cross-platform support, especially for dynamic shared libraries.
+ initialDefaultWireFormat_.reset(newInitialDefaultWireFormat());
+ defaultWireFormat_ = initialDefaultWireFormat_.get();
+ }
+
+ return defaultWireFormat_;
+}
ptr_lib::shared_ptr<vector<unsigned char> > WireFormat::encodeInterest(const Interest &interest)
{