0

I am trying to import frozen_model.pb using tensorflow c++. I want to check all the nodes in the graph if they are imported correctly. I found the example here using which I was trying to print the nodeNames. I am using the following code snippet.

int node_count = graph_def.node_size();
for (int i = 0; i < node_count; i++) {
    auto n = graph_def.node(i); // <-- error here
    cout<< n.name();
}

Once the line with the comment ( error here ) runs. It throws me a strange error. Here's the complete error.

CMakeFiles/c++.dir/main.cc.o: In function `google::protobuf::RepeatedPtrField<tensorflow::NodeDef>::TypeHandler::Type const& google::protobuf::internal::RepeatedPtrFieldBase::Get<google::protobuf::RepeatedPtrField<tensorflow::NodeDef>::TypeHandler>(int) const':
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0x3a): undefined reference to `google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0x50): undefined reference to `google::protobuf::internal::LogMessage::operator<<(char const*)'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0x68): undefined reference to `google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0x7c): undefined reference to `google::protobuf::internal::LogMessage::~LogMessage()'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0xb1): undefined reference to `google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0xc7): undefined reference to `google::protobuf::internal::LogMessage::operator<<(char const*)'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0xdf): undefined reference to `google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0xf3): undefined reference to `google::protobuf::internal::LogMessage::~LogMessage()'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0x12a): undefined reference to `google::protobuf::internal::LogMessage::~LogMessage()'
main.cc:(.text._ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi[_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS0_16RepeatedPtrFieldIN10tensorflow7NodeDefEE11TypeHandlerEEERKNT_4TypeEi]+0x14f): undefined reference to `google::protobuf::internal::LogMessage::~LogMessage()'
collect2: error: ld returned 1 exit status
make[2]: *** [../bin/c++] Error 1
make[1]: *** [CMakeFiles/c++.dir/all] Error 2
make: *** [all] Error 2

I get the correct number of node_size which is 21. You can see here as I imported and printed the nodes of the same frozen_graph.pb in python

enter image description here

Mj1992
  • 3,404
  • 13
  • 63
  • 102
  • 1
    How are you building that program? It looks like `libprotobuf` has not been linked in. – mrry Jul 19 '17 at 23:53
  • i setup the project using this repository https://github.com/cjweeks/tensorflow-cmake since I wanted to build the c++ project with cmake – Mj1992 Jul 19 '17 at 23:54

1 Answers1

0

With the help of @mrry's comment. I ended up linking the libprotobuf manually inside my CMakeLists.txt by including the FindProtoBuf.cmake file which is given inside the repository. I copied in the same directory as CMakeLists.txt and followed the commands in this answer on how to include ProtoBuf in cmake.

Mj1992
  • 3,404
  • 13
  • 63
  • 102