On Fri, Mar 27, 2015 at 5:32 AM, Peter Pimley <[email protected]>
wrote:

> I'm trying to get Protobuf 2.6.0 to compile on an embedded system that
> uses a customized version of clang as its compiler.  The compiler is giving
> me an error, and after looking at it for a while I think agree with the
> compiler.  After a quick glance it appears that Protobuf 2.6.1 is the same,
> but I haven't tried it yet.
>
> The error is in once.h, with GOOGLE_PROTOBUF_NO_THREAD_SAFETY defined.
>
> The exact error is:
>
> In file included from *[snip]*
> \protobuf-2.6.0\src\google\protobuf\descriptor.cc:45:
> 1>  In file included from ../src\google/protobuf/descriptor.pb.h:22:
> 1>  In file included from
> ../src\google/protobuf/generated_message_util.h:44:
> 1>../src\google/protobuf/stubs/once.h(152,4): error : no matching function
> for call to 'GoogleOnceInit'
> 1>  *[snip]*\protobuf-2.6.0\src\google\protobuf\descriptor.cc(889,26) :
>  note: in instantiation of function template specialization
> 'google::protobuf::GoogleOnceDynamic::Init<std::pair<const
> google::protobuf::FileDescriptorTables *, const
> google::protobuf::SourceCodeInfo *> >' requested here
> 1>  ../src\google/protobuf/stubs/once.h(101,12) :  note: candidate
> function [with Arg = std::pair<const google::protobuf::FileDescriptorTables
> *, const google::protobuf::SourceCodeInfo *>] not viable: no known
> conversion from 'void (*)(std::pair<const
> google::protobuf::FileDescriptorTables *, const
> google::protobuf::SourceCodeInfo *> *)' to 'void (*)(std::pair<const
> google::protobuf::FileDescriptorTables *, const
> google::protobuf::SourceCodeInfo *>)' for 2nd argument
>
>
> At the bottom of the file we can see the
> function GoogleOnceDynamic::Init.  The function takes two parameters:
> func_with_arg, a function that takes a T*, and secondly arg, which is a T*
> .  In the case of the error above, T is a std::pair of pointers.
> GoogleOnceDynamic::Init passes func_with_arg and arg to the
> function GoogleOnceInit<T>.  However, GoogleOnceInit is declared as taking
> a function taking an *actual* T (not a T*), and an *actual* T (again, not
> a T*).
>
> In the case where GOOGLE_PROTOBUF_NO_THREAD_SAFETY is *not* defined,
> GoogleOnceInit takes a function taking a T*, and a T*.
>
> Should the GOOGLE_PROTOBUF_NO_THREAD_SAFETY version of GoogleOnceInit be
> altered to take T*?
>
Yes, that sounds like the right fix to me. Could you help submit an issue
or send us a pull request on our github site?
https://github.com/google/protobuf


>
> Thanks,
> Peter Pimley
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/protobuf.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to