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*?

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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to