diff options
author | Peter Kasting <pkasting@google.com> | 2015-08-27 14:30:28 -0700 |
---|---|---|
committer | Peter Kasting <pkasting@google.com> | 2015-08-27 14:30:28 -0700 |
commit | 6e54999773a4b2c655dedc58f7ccfa69ab5beff4 (patch) | |
tree | f34a51aff7a5d55e972e5527630353dfaef2113f /src/google | |
parent | c7a1f8ec3b7ab4f6763e4d5c2663ad39e13a6aa0 (diff) | |
download | protobuf-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/google')
-rw-r--r-- | src/google/protobuf/metadata.cc | 42 | ||||
-rw-r--r-- | src/google/protobuf/metadata.h | 3 |
2 files changed, 43 insertions, 2 deletions
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) { |