[英]VS 2019, Tensorflow 2.6 C++, tensorflow::TensorInfo name() leads to The procedure entry point could not be located in the dynamic link library
我有一個 C++ 項目,我正在加載一個保存的模型並想做一些推理。 現在我有以下代碼:
Status status = LoadSavedModel(session_options, run_options, "final", { kSavedModelTagServe }, &model_bundle);
auto sig_map = model_bundle.GetSignatures();
auto model_def = sig_map.at("serving_default");
for (auto const& p : model_def.inputs()) {
std::cout << p.first.c_str() << std::endl;
std::cout << p.second.name() << std::endl;
}
當我執行成功構建的 exe 文件時,此代碼段會導致以下錯誤消息:
The procedure entry point could not be located in the dynamic link library
如果我評論//std::cout << p.second.name() << std::endl;
出來,一切都編譯良好,可執行文件也運行。 因為 p.second 是tensorflow::TensorInfo
類型, tensorflow::TensorInfo
我也嘗試創建這樣的對象並調用ti.name();
這也會導致同樣的問題。
你能提出任何關於如何解決這個問題的想法嗎? tensorflow_cc.dll 的編譯是不是有點不對?
問題很簡單。 編譯 tensorflow 時,您必須手動將缺少的導出符號添加到tensorflow_filtered_def_file.def
並重新鏈接 tensorflow.dll。 有一次,在重新鏈接 tensorflow.dll 並根據此 dll 編譯我自己的程序后,我忘記將新的 tensorflow.dll 復制到我正在測試我的程序的位置。 因此,新的可執行文件無法與先前編譯的 tensorflow.dll 一起使用,但由於它知道所有符號,因此在錯誤消息中顯示為空符號。
解決方案:確保在運行程序時使用與編譯程序期間相同的 tensorflow.dll。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.