1) I would guess the problem is that the "action" message type refers to
undefined types eaction_type and ereason. There are probably error messages
farther up indicating that action could not be built. Because action isn't a
valid type, RecordHeader can't refer to it, and thinks that action is an
undefined_symbol as well. The DescriptorBuilder will read in all inputs, and
cross-link the types once everything has been processed. It doesn't matter
what order they are defined in.
2) You can manually build the FileDescriptorProto representation yourself,
or use the classes used by the compiler: see
google::protobuf::compiler::Parser or google::protobuf::compiler::Importer.

On Wed, Sep 22, 2010 at 4:42 AM, Himanshu Srivastava <him.s...@gmail.com>wrote:

> Hi Kenton,
>
> I have the following message in my .proto file:
>
> //************************************************/
> package traceFileMessagesProto;
>
> message RecordHeader {
>
> message  myqueue{
>  optional uint32 id = 1;
>  optional uint32 Priority = 2;
> }
>
> message  action{
>  optional eactiontype    eactiontype_instance = 1;
>  optional ereason ereason_instance = 2;
>  optional myqueue myqueue_instance = 3;
> }
> optional action action_instance =1;
>
> } //end RecordHeader
> /***************************************************/
> Thus, "action" is nested message in "RecordHeader" and has "queue"
> submessage in it.
>
> I used the protoc compiler -o <desc-file> option to generate the descriptor
> set file and loaded it through istream in c++ application, followed by
> streaming FileDescriptorSet object with this descriptor set file:
>
> //***************************************************************//
> ifstream desc_file("mydescriptor.dsc",ios::in);
> FileDescriptorSet f;
> f.ParseFromIstream(&desc_file);
> //***************************************************************//
>
> However, while parsing through DescriptorPool::BuildFile(f.file(0));
> at the line corresponding to the message file line:
> => optional action action_instance =1;
>
> the BuildFile() function exits by giving error:
>
> undefined_symbol "action"
>
> The code returns through the following function in protoc library:
> //***************************************************************//
> void DescriptorBuilder::AddNotDefinedError(
>     const string& element_name,
>     const Message& descriptor,
>     DescriptorPool::ErrorCollector::ErrorLocation location,
>     const string& undefined_symbol) {
>   if (possible_undeclared_dependency_ == NULL) {
>     AddError(element_name, descriptor, location,
>              "\"" + undefined_symbol + "\" is not defined.");
> //***************************************************************//
>
> The only possible explanation could be that the message "action" is not
> parsed before its instance declaration from my .proto/descriptor_set file.
> Probably all nested messages should be parsed on their instance
> declarations in a recursive manner in the DescriptorPool::Buildfile()
> function.
> Qustion1:
> How do I solve the above issue?
>
> Question 2:
> Can not I simply load my messages in DescriptorPool through the .proto file
> instead of calling the service of protoc compiler to generate a descriptor
> file? I have to generate .proto file at runtime and I don't want to call
> another exe (protoc.exe) from my application for dependency reasons.
>
> Thanks in advance for any solutions /directions.
>
> Regards,
> Himanshu
>
> --
> 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<protobuf%2bunsubscr...@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.

Reply via email to