error: cannot convert ‘nvinfer1::ICudaEngine*’ to ‘nvinfer1::IHostMemory*’ in initialization
时间: 2023-07-08 09:33:48 浏览: 62
对不起,之前的回答中有误。`deserializeCudaEngine()`函数返回的是`nvinfer1::ICudaEngine*`类型的指针,而不是`nvinfer1::IHostMemory*`类型的指针。为了获取错误消息,您需要使用`nvinfer1::IHostMemory`对象,而不是`nvinfer1::ICudaEngine`对象。以下是修改后的示例代码片段:
```
int main()
{
// Create the inference runtime
nvinfer1::IRuntime* runtime = nvinfer1::createInferRuntime(...);
// Deserialize the CUDA engine
std::ifstream engineFile("engine.plan", std::ios::binary);
engineFile.seekg(0, std::ios::end);
const size_t fileSize = engineFile.tellg();
engineFile.seekg(0, std::ios::beg);
std::vector<char> engineData(fileSize);
engineFile.read(engineData.data(), fileSize);
nvinfer1::IHostMemory* engineMemory = runtime->deserializeCudaEngine(engineData.data(), fileSize);
// Check if deserialization was successful
if (engineMemory == nullptr)
{
std::cerr << "Error: Failed to deserialize CUDA engine" << std::endl;
return 1;
}
// Check if there were any errors during deserialization
if (engineMemory->size() == 0)
{
std::cerr << "Error: " << std::string(static_cast<char*>(engineMemory->data()), engineMemory->size()) << std::endl;
return 1;
}
// Deserialize the engine from the host memory
nvinfer1::ICudaEngine* engine = runtime->deserializeCudaEngine(engineMemory->data(), engineMemory->size(), nullptr);
// ...
}
```
在上述示例中,`deserializeCudaEngine()`函数返回一个`nvinfer1::IHostMemory`对象,而不是`nvinfer1::ICudaEngine`对象。因此,如果您要获取错误消息,需要使用`engineMemory`对象,而不是`engine`对象。