This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: Protobuf string serialization bug with statically linked protobuf 2.5.0

Dear all,

I'm having problems with statically linked executables that use
protocol buffers.
I suspect the problem may be related to incompatibility between
std::string implementation used to compile the library vs. current. If
that's the case, the problem would likely go away with recompilation
of the protocol buffer libraries (protobuf-lite is also exposing the
same problem).

I have attached a test case as you requested. the example program
compiles two variants - one dynamically linked (works fine) and one
statically linked that crashes upon first attempt to serialize the
protocol buffer.

It would be great if someone could take a look and possibly rebuild
the static libraries for protocol buffers.

Best regards,

-------- example.proto ------------
syntax = "proto2";

package example;

message ExampleMsg {
  optional int32 argc = 1;
  optional string argv0 = 2;

-------- ------------
#include <iostream>
#include <string>

#include "example.pb.h"

int main(int argc, char** argv) {
  example::ExampleMsg message;


  std::cout << "Serializing protocol buffer." << std::endl;
  std::string serialized;
  message.SerializeToString(&serialized);  // static variant crashes here.
  std::cout << "Serialized length: " << serialized.length() << std::endl;


  std::cout << "Deserializing protocol buffer." << std::endl;
  message.ParseFromString(serialized);  // static variant also crashes here.
  std::cout << "Deserialized content: argc=" << message.argc() << ", argv0="
            << message.argv0();

  return 0;

-------- Makefile ------------
CFLAGS += -Wall
CC = g++
LIBS = -lprotobuf.dll

all: clean example example-bug example.proto
        protoc --cpp_out=. $^

        rm -f *.o *.pb.* *.exe*

example: example.pb.o main.o
        $(CC) $(CFLAGS) $^ -o $@ $(LIBS)

example-bug: example.pb.o main.o
        $(CC) $(CFLAGS) -static $^ -o $@ $(LIBS)

Problem reports:
Unsubscribe info:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]