From b1295eeffbf2ae7da8a5c7d8601c3ace0663fa09 Mon Sep 17 00:00:00 2001 From: Julien Brianceau Date: Thu, 8 Dec 2016 13:26:23 +0100 Subject: C++: export _xxx_default_instance_ symbols _xxx_default_instance_ symbols are used in inline functions. We have to export them to avoid undefined reference link errors. --- src/google/protobuf/compiler/cpp/cpp_file.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/google') diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc index bc664c70..d8fda59c 100644 --- a/src/google/protobuf/compiler/cpp/cpp_file.cc +++ b/src/google/protobuf/compiler/cpp/cpp_file.cc @@ -403,7 +403,7 @@ class FileGenerator::ForwardDeclarations { std::map& classes() { return classes_; } std::map& enums() { return enums_; } - void Print(io::Printer* printer) const { + void Print(io::Printer* printer, const Options& options) const { for (std::map::const_iterator it = enums_.begin(), end = enums_.end(); @@ -422,8 +422,11 @@ class FileGenerator::ForwardDeclarations { printer->Print( "class $classname$DefaultTypeInternal;\n" + "$dllexport_decl$" "extern $classname$DefaultTypeInternal " "_$classname$_default_instance_;\n", // NOLINT + "dllexport_decl", + options.dllexport_decl.empty() ? "" : options.dllexport_decl + " ", "classname", it->first); } @@ -433,7 +436,7 @@ class FileGenerator::ForwardDeclarations { it != end; ++it) { printer->Print("namespace $nsname$ {\n", "nsname", it->first); - it->second->Print(printer); + it->second->Print(printer, options); printer->Print("} // namespace $nsname$\n", "nsname", it->first); } @@ -808,7 +811,7 @@ void FileGenerator::GenerateForwardDeclarations(io::Printer* printer) { dependency.FillForwardDeclarations(&decls); } FillForwardDeclarations(&decls); - decls.Print(printer); + decls.Print(printer, options_); } void FileGenerator::FillForwardDeclarations(ForwardDeclarations* decls) { -- cgit v1.2.3