【问题标题】:C onnx header can't find OrtEnv definitionC onnx 标头找不到 OrtEnv 定义
【发布时间】:2020-12-31 07:27:03
【问题描述】:

我正在尝试包装 ONNX 标头以用于另一种语言。需要明确的是,它使用 C dll 并需要 C 标头,但是由于 ONNX 标头似乎缺少当前 ONNX 示例中使用的 OrtEnv 结构的定义,因此我在使用 C 标头进行编译时遇到了问题。

https://github.com/microsoft/onnxruntime/blob/master/include/onnxruntime/core/session/onnxruntime_c_api.h

这是我试图用来包装的 ONNX api 标头。

还有样本

https://github.com/microsoft/onnxruntime/blob/master/csharp/test/Microsoft.ML.OnnxRuntime.EndToEndTests.Capi/C_Api_Sample.cpp

在第 30 行,它声明了一个指向结构的原始指针,但我在 api 标头中找不到定义,但我不明白。

有人可以详细说明我做错了什么吗?我只能看到返回 OrtEnv 的方法声明,但从不返回类型声明。

这里有一个完整的动态包,带有标题:

https://github.com/microsoft/onnxruntime/releases/download/v1.4.0/onnxruntime-win-x64-gpu-1.4.0.zip

将 dll 链接到您的应用程序并包含上述我遇到问题的标头应该很简单。

【问题讨论】:

  • 你用什么语言编写你的程序?这应该是唯一使用的语言标签,即使您使用的是用 C 编写的库。
  • 抱怨并不是来自 vcc,因为它使用 nim 包装,输出到 c 并链接 dll,因此使用 vcc,但甚至独立使用 vcc 它找不到 OrtEnv,因此无法找到定义C 标头中的 OrtEnv 实际上是问题而不是包装。另外,正如我所说,iv 查看了标题,我发现对 ortenc 的唯一引用是函数 defs 中的指针

标签: c++ c dll header onnx


【解决方案1】:

如果标题不包含定义,则表示作者不想将其提供给您。发生这种情况的原因有多种,其中之一是您不应该篡改内容。

【讨论】:

  • 我同意,除了 iv 链接的示例在第 30 行使用指向相关结构的原始指针,并且标头本身引用了指向该结构的指针,但没有定义它,这就是我感到困惑的原因关于它的外观/存在。所以要么样本不正确,要么我的定义有问题,或者......我不知道
  • 使用指向未知结构的指针并没有错。这限制了可用于此类指针的操作的全部内容:您不能取消引用它,也不能增加它。但除此之外没关系。
  • OrtEnvonnxruntime/core/session/ort_env.h 中定义,它不在include 目录中,这意味着您不应该需要它。您是否收到任何编译器/链接器错误,或者您只是对它的工作原理感到困惑?
  • 编译器抱怨链接我会在可能的时候给出确切的错误,但它是一个定义错误,因为它没有找到 OrtEnv。我也很困惑它是如何工作的,因为我也无法在头文件中找到定义,并且示例只包含我链接的头文件,所以我不确定示例应用程序如何使用指向未定义结构的原始指针进行编译我找不到。 Christopher 说的是真的,但我不确定如何定义一个指针,该指针指向从标头中不知道的类型以链接到 dll。我的意思是,如果类型未知,它不应该是 void* 吗?
  • 获取指向未知结构的指针的唯一方法是从定义它的库中获取它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
相关资源
最近更新 更多