首页 > 解决方案 > Onnx 不工作。AttributeProto 不是名称错误

问题描述

我正在尝试在 c++ 代码中使用 onnx。但是当我尝试使用 onnx/proto_utils.h 时出现错误:'AttributeProto' 不是名称类型。我不确定是我的安装有问题还是什么。我使用 readme.md 安装说明从源代码安装了 onnx。如果有人知道出了什么问题,我会提供任何帮助。

Onnx安装步骤:

git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
python3 setup.py install
sudo apt-get install protobuf-compiler libprotoc-dev
pip3 install onnx

测试.cpp

#include <iostream>
#include "onnx/onnx_pb.h"
#include "onnx/proto_utils.h"

int main()
{
    std::cout << "Hello\n";
}

汇编

g++ -DONNX_ML=1 test.cpp -o test -lprotobuf -I/home/bearnard/onnx/.setuptools-cmake-build/

错误信息

In file included from test.cpp:3:
/usr/local/include/onnx/proto_utils.h:38:65: error: ‘AttributeProto’ does not name a type
   38 | template<typename T> inline std::vector<T> RetrieveValues(const AttributeProto& attr);
      |                                                                 ^~~~~~~~~~~~~~
/usr/local/include/onnx/proto_utils.h:39:61: error: ‘AttributeProto’ does not name a type
   39 | template<> inline std::vector<int64_t> RetrieveValues(const AttributeProto& attr) {
      |                                                             ^~~~~~~~~~~~~~
/usr/local/include/onnx/proto_utils.h: In function ‘std::vector<T> ONNX_NAMESPACE::RetrieveValues(const int&) [with T = long int]’:
/usr/local/include/onnx/proto_utils.h:40:16: error: request for member ‘ints’ in ‘attr’, which is of non-class type ‘const int’
   40 |   return {attr.ints().begin(), attr.ints().end()};
      |                ^~~~
/usr/local/include/onnx/proto_utils.h:40:37: error: request for member ‘ints’ in ‘attr’, which is of non-class type ‘const int’
   40 |   return {attr.ints().begin(), attr.ints().end()};
      |                                     ^~~~
/usr/local/include/onnx/proto_utils.h:40:49: error: could not convert ‘{<expression error>, <expression error>}’ from ‘&lt;brace-enclosed initializer list>’ to ‘std::vector<long int>’
   40 |   return {attr.ints().begin(), attr.ints().end()};
      |                                                 ^
      |                                                 |
      |                                                 <brace-enclosed initializer list>
/usr/local/include/onnx/proto_utils.h: At global scope:
/usr/local/include/onnx/proto_utils.h:43:65: error: ‘AttributeProto’ does not name a type
   43 | template<> inline std::vector<std::string> RetrieveValues(const AttributeProto& attr) {
      |                                                                 ^~~~~~~~~~~~~~
/usr/local/include/onnx/proto_utils.h: In function ‘std::vector<T> ONNX_NAMESPACE::RetrieveValues(const int&) [with T = std::__cxx11::basic_string<char>]’:
/usr/local/include/onnx/proto_utils.h:44:17: error: request for member ‘strings’ in ‘attr’, which is of non-class type ‘const int’
   44 |   return { attr.strings().begin(), attr.strings().end() };
      |                 ^~~~~~~
/usr/local/include/onnx/proto_utils.h:44:41: error: request for member ‘strings’ in ‘attr’, which is of non-class type ‘const int’
   44 |   return { attr.strings().begin(), attr.strings().end() };
      |                                         ^~~~~~~
/usr/local/include/onnx/proto_utils.h:44:57: error: could not convert ‘{<expression error>, <expression error>}’ from ‘&lt;brace-enclosed initializer list>’ to ‘std::vector<std::__cxx11::basic_string<char> >’
   44 |   return { attr.strings().begin(), attr.strings().end() };
      |                                                         ^
      |                                                         |
      |                                                         <brace-enclosed initializer list>
/usr/local/include/onnx/proto_utils.h: At global scope:
/usr/local/include/onnx/proto_utils.h:47:59: error: ‘AttributeProto’ does not name a type
   47 | template<> inline std::vector<float> RetrieveValues(const AttributeProto& attr) {
      |                                                           ^~~~~~~~~~~~~~
/usr/local/include/onnx/proto_utils.h: In function ‘std::vector<T> ONNX_NAMESPACE::RetrieveValues(const int&) [with T = float]’:
/usr/local/include/onnx/proto_utils.h:48:17: error: request for member ‘floats’ in ‘attr’, which is of non-class type ‘const int’
   48 |   return { attr.floats().begin(), attr.floats().end() };
      |                 ^~~~~~
/usr/local/include/onnx/proto_utils.h:48:40: error: request for member ‘floats’ in ‘attr’, which is of non-class type ‘const int’
   48 |   return { attr.floats().begin(), attr.floats().end() };
      |                                        ^~~~~~
/usr/local/include/onnx/proto_utils.h:48:55: error: could not convert ‘{<expression error>, <expression error>}’ from ‘&lt;brace-enclosed initializer list>’ to ‘std::vector<float>’
   48 |   return { attr.floats().begin(), attr.floats().end() };
      |                                                       ^
      |                                                       |
      |                                                       <brace-enclosed initializer list>

标签: c++onnx

解决方案


推荐阅读