aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Kasting <pkasting@google.com>2015-08-27 14:30:28 -0700
committerPeter Kasting <pkasting@google.com>2015-08-27 14:30:28 -0700
commit6e54999773a4b2c655dedc58f7ccfa69ab5beff4 (patch)
treef34a51aff7a5d55e972e5527630353dfaef2113f /src
parentc7a1f8ec3b7ab4f6763e4d5c2663ad39e13a6aa0 (diff)
downloadprotobuf-6e54999773a4b2c655dedc58f7ccfa69ab5beff4.tar.gz
protobuf-6e54999773a4b2c655dedc58f7ccfa69ab5beff4.tar.bz2
protobuf-6e54999773a4b2c655dedc58f7ccfa69ab5beff4.zip
Fix compile failures building protobuf DLLs on MSVC in Chromium's codebase.
When trying to compile the protobuf code as a DLL, and then compile other DLLs with generated .pb.cc/h files that reference InternalMetadataWithArena::InternalMetadataWithArena(Arena*), MSVC gives an "unresolved external symbol" error. This seems to be due to the function being simultaneously exported and inline. Moving it out-of-line fixes things. There are other functions exported and inline as well but de-inlining them doesn't seem to be necessary to get the build working, and I'd rather de-inline as few functions as possible.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am1
-rw-r--r--src/google/protobuf/metadata.cc42
-rw-r--r--src/google/protobuf/metadata.h3
3 files changed, 44 insertions, 2 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 584bcd21..3019bc31 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -196,6 +196,7 @@ libprotobuf_lite_la_SOURCES = \
google/protobuf/extension_set.cc \
google/protobuf/generated_message_util.cc \
google/protobuf/message_lite.cc \
+ google/protobuf/metadata.cc \
google/protobuf/repeated_field.cc \
google/protobuf/wire_format_lite.cc \
google/protobuf/io/coded_stream.cc \
diff --git a/src/google/protobuf/metadata.cc b/src/google/protobuf/metadata.cc
new file mode 100644
index 00000000..d30a7670
--- /dev/null
+++ b/src/google/protobuf/metadata.cc
@@ -0,0 +1,42 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2015 Google Inc. All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <google/protobuf/metadata.h>
+
+namespace google {
+namespace protobuf {
+namespace internal {
+
+InternalMetadataWithArena::InternalMetadataWithArena(Arena* arena)
+ : ptr_(arena) {}
+
+} // namespace internal
+} // namespace protobuf
+} // namespace google
diff --git a/src/google/protobuf/metadata.h b/src/google/protobuf/metadata.h
index c5bab0a8..db647300 100644
--- a/src/google/protobuf/metadata.h
+++ b/src/google/protobuf/metadata.h
@@ -59,8 +59,7 @@ namespace internal {
class LIBPROTOBUF_EXPORT InternalMetadataWithArena {
public:
InternalMetadataWithArena() : ptr_(NULL) {}
- explicit InternalMetadataWithArena(Arena* arena)
- : ptr_ (arena) {}
+ explicit InternalMetadataWithArena(Arena* arena);
~InternalMetadataWithArena() {
if (have_unknown_fields() && arena() == NULL) {