簡體   English   中英

VS 2019, Tensorflow 2.6 C++, tensorflow::TensorInfo name() 導致 The procedure entry point could not belocated in the dynamic link library

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM