Re: [protobuf] Re: Windows Dll

2010-01-04 Thread Kenton Varda
Fixed in revision 286.

On Fri, Dec 25, 2009 at 2:28 PM, Kenton Varda  wrote:

> Ah, yeah, I hadn't tested compiling as a DLL under MSVC yet.  Thanks for
> reminding me to fix this before the final release.  2.2.0 should work.
>
>
> On Fri, Dec 25, 2009 at 1:27 AM, Soth  wrote:
>
>> I`m using 2.3.0rc1.
>>
>> On 25 дек, 07:07, Kenton Varda  wrote:
>> > What version did you try this with?
>> >
>> > On Thu, Dec 24, 2009 at 3:38 PM, Soth  wrote:
>> > > Hi,
>> > > I`ve tried to compile the protocol buffers library as a DLL in
>> > > msvs2008 and it didn`t link. The problems are basically with incorrect
>> > > export of functions/classes from the libprotobuf-lite and
>> > > libprotobuf :
>> >
>> > > 1) StringSpaceUsedExcludingSelf undefined in lite, to solve moved
>> > > definition from generated_message_reflection.h to repeated_field.cc
>> >
>> > > 2) bool DescriptorPoolExtensionFinder::Find(int number, ExtensionInfo*
>> > > output) undefined in lite and i think it can be only solved by
>> > > removing DescriptorPoolExtensionFinder class declaration from the
>> > > extension_set.h and placing it in to a new file in libprotobuf
>> > > extension_set_heavy.h or somewhere else in libprotobuf local headers.
>> >
>> > > On Dec 23, 3:51 am, Kenton Varda  wrote:
>> > > > If you link protobuf as a DLL:
>> >
>> > > > (1) You must link to the C runtime as a DLL, otherwise you'll end up
>> with
>> > > > two copies of the C runtime, which may mean two separate heaps,
>> among
>> > > other
>> > > > things.
>> >
>> > > > (2) All components of your application which use protocol buffers
>> must
>> > > link
>> > > > to the same C runtime as the protocol buffers DLL.  This is true
>> when
>> > > static
>> > > > linking as well, but sometimes people mistakenly think that it is
>> not
>> > > true
>> > > > with DLLs.
>> >
>> > > > (3) All components of your application which use protocol buffers
>> must
>> > > use
>> > > > the same version of protocol buffers.  The DLL binary interface is
>> not
>> > > > compatible between two different versions.
>> >
>> > > > (4) You absolutely cannot place the protobuf DLL in a system shared
>> > > > directory, because it may be incompatible with other apps which use
>> a
>> > > > different version of the DLL.  The DLL has to stay in your
>> application's
>> > > own
>> > > > directory.
>> >
>> > > > Given these constraints, there isn't much benefit to dynamic linking
>> for
>> > > > most people.  Usually the advantage of using a DLL is that you can
>> share
>> > > it
>> > > > between multiple programs, but that is unlikely to work well with
>> > > protocol
>> > > > buffers due to the interface version compatibility issues.
>> >
>> > > > Another typical reason to use DLLs is because you want to provide a
>> > > "plugin"
>> > > > system for your application.  But if all your plugins link against
>> > > > libprotobuf as a DLL, then they must all use the same version of
>> protocol
>> > > > buffers, which is a pretty serious limitation to any plugin system.
>>  A
>> > > > better approach would be to statically link each plugin individually
>> > > against
>> > > > protocol buffers; this way, each plugin has its own embedded copy
>> and
>> > > > doesn't have to worry about version compatibility with other
>> plugins.
>> > > >  However, if you do this, then you cannot pass protocol buffer
>> objects
>> > > > between plugins, since they might use different versions of the
>> library.
>> > > You
>> > > > can, however, pass encoded messages between plugins -- the encoding
>> > > format
>> > > > is (obviously) compatible between versions.
>> >
>> > > > On Mon, Dec 21, 2009 at 5:21 PM, Soth  wrote:
>> > > > > Hi,
>> > > > > in protobuf documentation it`s stated that static linking is
>> preferred
>> > > > > to dynamic because of different issues. I`d like to know what
>> these
>> > > > > issues are, what i shouldnt do with the protobuf if i link with it
>> > > > > dynamically and how come that static linking is better. Thanks
>> ahead.
>> >
>> > > > > --
>> >
>> > > > > You received this message because you are subscribed to the Google
>> > > Groups
>> > > > > "Protocol Buffers" group.
>> > > > > To post to this group, send email to proto...@googlegroups.com.
>> > > > > To unsubscribe from this group, send email to
>> > > > > protobuf+unsubscr...@googlegroups.com
>> 
>> >
>> > > 
>> > > > > .
>> > > > > For more options, visit this group at
>> > > > >http://groups.google.com/group/protobuf?hl=en.-Hide quoted text -
>> >
>> > > > - Show quoted text -
>> >
>> > > --
>> >
>> > > You received this message because you are subscribed to the Google
>> Groups
>> > > "Protocol Buffers" group.
>> > > To post to this group, send email to proto...@googlegroups.com.
>> > > To unsubscribe from this group, send email to
>> > > protobuf+unsubscr...@googlegroups.com
>> 
>> >
>> > > .
>> > > For more options, visit this group at
>> > >http://groups.google.com/group/protobuf?hl=en.
>>
>> --
>>
>> You received this message beca

Re: [protobuf] Re: Windows Dll

2009-12-25 Thread Kenton Varda
Ah, yeah, I hadn't tested compiling as a DLL under MSVC yet.  Thanks for
reminding me to fix this before the final release.  2.2.0 should work.

On Fri, Dec 25, 2009 at 1:27 AM, Soth  wrote:

> I`m using 2.3.0rc1.
>
> On 25 дек, 07:07, Kenton Varda  wrote:
> > What version did you try this with?
> >
> > On Thu, Dec 24, 2009 at 3:38 PM, Soth  wrote:
> > > Hi,
> > > I`ve tried to compile the protocol buffers library as a DLL in
> > > msvs2008 and it didn`t link. The problems are basically with incorrect
> > > export of functions/classes from the libprotobuf-lite and
> > > libprotobuf :
> >
> > > 1) StringSpaceUsedExcludingSelf undefined in lite, to solve moved
> > > definition from generated_message_reflection.h to repeated_field.cc
> >
> > > 2) bool DescriptorPoolExtensionFinder::Find(int number, ExtensionInfo*
> > > output) undefined in lite and i think it can be only solved by
> > > removing DescriptorPoolExtensionFinder class declaration from the
> > > extension_set.h and placing it in to a new file in libprotobuf
> > > extension_set_heavy.h or somewhere else in libprotobuf local headers.
> >
> > > On Dec 23, 3:51 am, Kenton Varda  wrote:
> > > > If you link protobuf as a DLL:
> >
> > > > (1) You must link to the C runtime as a DLL, otherwise you'll end up
> with
> > > > two copies of the C runtime, which may mean two separate heaps, among
> > > other
> > > > things.
> >
> > > > (2) All components of your application which use protocol buffers
> must
> > > link
> > > > to the same C runtime as the protocol buffers DLL.  This is true when
> > > static
> > > > linking as well, but sometimes people mistakenly think that it is not
> > > true
> > > > with DLLs.
> >
> > > > (3) All components of your application which use protocol buffers
> must
> > > use
> > > > the same version of protocol buffers.  The DLL binary interface is
> not
> > > > compatible between two different versions.
> >
> > > > (4) You absolutely cannot place the protobuf DLL in a system shared
> > > > directory, because it may be incompatible with other apps which use a
> > > > different version of the DLL.  The DLL has to stay in your
> application's
> > > own
> > > > directory.
> >
> > > > Given these constraints, there isn't much benefit to dynamic linking
> for
> > > > most people.  Usually the advantage of using a DLL is that you can
> share
> > > it
> > > > between multiple programs, but that is unlikely to work well with
> > > protocol
> > > > buffers due to the interface version compatibility issues.
> >
> > > > Another typical reason to use DLLs is because you want to provide a
> > > "plugin"
> > > > system for your application.  But if all your plugins link against
> > > > libprotobuf as a DLL, then they must all use the same version of
> protocol
> > > > buffers, which is a pretty serious limitation to any plugin system.
>  A
> > > > better approach would be to statically link each plugin individually
> > > against
> > > > protocol buffers; this way, each plugin has its own embedded copy and
> > > > doesn't have to worry about version compatibility with other plugins.
> > > >  However, if you do this, then you cannot pass protocol buffer
> objects
> > > > between plugins, since they might use different versions of the
> library.
> > > You
> > > > can, however, pass encoded messages between plugins -- the encoding
> > > format
> > > > is (obviously) compatible between versions.
> >
> > > > On Mon, Dec 21, 2009 at 5:21 PM, Soth  wrote:
> > > > > Hi,
> > > > > in protobuf documentation it`s stated that static linking is
> preferred
> > > > > to dynamic because of different issues. I`d like to know what these
> > > > > issues are, what i shouldnt do with the protobuf if i link with it
> > > > > dynamically and how come that static linking is better. Thanks
> ahead.
> >
> > > > > --
> >
> > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > "Protocol Buffers" group.
> > > > > To post to this group, send email to proto...@googlegroups.com.
> > > > > To unsubscribe from this group, send email to
> > > > > protobuf+unsubscr...@googlegroups.com
> 
> >
> > > 
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/protobuf?hl=en.-Hide quoted text -
> >
> > > > - Show quoted text -
> >
> > > --
> >
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Protocol Buffers" group.
> > > To post to this group, send email to proto...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > protobuf+unsubscr...@googlegroups.com
> 
> >
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/protobuf?hl=en.
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com
> .
> For

Re: [protobuf] Re: Windows Dll

2009-12-24 Thread Kenton Varda
What version did you try this with?

On Thu, Dec 24, 2009 at 3:38 PM, Soth  wrote:

> Hi,
> I`ve tried to compile the protocol buffers library as a DLL in
> msvs2008 and it didn`t link. The problems are basically with incorrect
> export of functions/classes from the libprotobuf-lite and
> libprotobuf :
>
> 1) StringSpaceUsedExcludingSelf undefined in lite, to solve moved
> definition from generated_message_reflection.h to repeated_field.cc
>
> 2) bool DescriptorPoolExtensionFinder::Find(int number, ExtensionInfo*
> output) undefined in lite and i think it can be only solved by
> removing DescriptorPoolExtensionFinder class declaration from the
> extension_set.h and placing it in to a new file in libprotobuf
> extension_set_heavy.h or somewhere else in libprotobuf local headers.
>
> On Dec 23, 3:51 am, Kenton Varda  wrote:
> > If you link protobuf as a DLL:
> >
> > (1) You must link to the C runtime as a DLL, otherwise you'll end up with
> > two copies of the C runtime, which may mean two separate heaps, among
> other
> > things.
> >
> > (2) All components of your application which use protocol buffers must
> link
> > to the same C runtime as the protocol buffers DLL.  This is true when
> static
> > linking as well, but sometimes people mistakenly think that it is not
> true
> > with DLLs.
> >
> > (3) All components of your application which use protocol buffers must
> use
> > the same version of protocol buffers.  The DLL binary interface is not
> > compatible between two different versions.
> >
> > (4) You absolutely cannot place the protobuf DLL in a system shared
> > directory, because it may be incompatible with other apps which use a
> > different version of the DLL.  The DLL has to stay in your application's
> own
> > directory.
> >
> > Given these constraints, there isn't much benefit to dynamic linking for
> > most people.  Usually the advantage of using a DLL is that you can share
> it
> > between multiple programs, but that is unlikely to work well with
> protocol
> > buffers due to the interface version compatibility issues.
> >
> > Another typical reason to use DLLs is because you want to provide a
> "plugin"
> > system for your application.  But if all your plugins link against
> > libprotobuf as a DLL, then they must all use the same version of protocol
> > buffers, which is a pretty serious limitation to any plugin system.  A
> > better approach would be to statically link each plugin individually
> against
> > protocol buffers; this way, each plugin has its own embedded copy and
> > doesn't have to worry about version compatibility with other plugins.
> >  However, if you do this, then you cannot pass protocol buffer objects
> > between plugins, since they might use different versions of the library.
> You
> > can, however, pass encoded messages between plugins -- the encoding
> format
> > is (obviously) compatible between versions.
> >
> >
> >
> > On Mon, Dec 21, 2009 at 5:21 PM, Soth  wrote:
> > > Hi,
> > > in protobuf documentation it`s stated that static linking is preferred
> > > to dynamic because of different issues. I`d like to know what these
> > > issues are, what i shouldnt do with the protobuf if i link with it
> > > dynamically and how come that static linking is better. Thanks ahead.
> >
> > > --
> >
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Protocol Buffers" group.
> > > To post to this group, send email to proto...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > protobuf+unsubscr...@googlegroups.com
> 
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/protobuf?hl=en.- Hide quoted text -
> >
> > - Show quoted text -
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.