LNK2001未解析的外部符号__imp_PathIsRelativeA

LNK2001 unresolved external symbol __imp_PathIsRelativeA

提问人:tridjam 提问时间:3/7/2023 更新时间:3/10/2023 访问量:276

问:

我尝试使用带有 OpenVino 的 OpenCV 运行神经网络,但遇到错误LNK2001无法解析的外部符号__imp_PathIsRelativeA

void TestOpenVinoModel()
{    
    // Model
    string mapping_path = "C:\\ROOT1\\opencv_build_test\\files_openvino_2\\ssdlite_mobilenet_v2.mapping";
    string xml_path = "C:\\ROOT1\\opencv_build_test\\files_openvino_2\\ssdlite_mobilenet_v2.xml";
    string bin_path = "C:\\ROOT1\\opencv_build_test\\files_openvino_2\\ssdlite_mobilenet_v2.bin";

    // Load the OpenVINO plugin for OpenCV
    Net openvino_model = readNetFromModelOptimizer(xml_path, bin_path);
    
    // Set target device to CPU
    openvino_model.setPreferableTarget(DNN_TARGET_CPU);

    // Load an image
    Mat img = imread("C:\\ROOT1\\opencv_build_test\\car_300x300.jpg");

    // Preprocess the image
    //Mat blob = blobFromImage(img, 1.0, Size(), Scalar(), true, false);
    Mat blob = blobFromImage(img, 0.007843f, Size(300, 300), Scalar(127.5f, 127.5f, 127.5f), false);
    //Mat blob;
    //cvtColor(img, blob, COLOR_BGR2RGB);
    //blob = blob.reshape(1, { 1, 3, 300, 300 });

    // Set input data for the network
    openvino_model.setInput(blob);

    // Run forward pass to get the output
    Mat detections = openvino_model.forward();

    // Post-process the output to extract the bounding boxes
    Mat detections_reshaped = detections.reshape(1, detections.total() / 7);

    // Draw bounding boxes on the original image
    for (int i = 0; i < detections_reshaped.rows; ++i) {
        float confidence = detections_reshaped.at<float>(i, 2);
        if (confidence > 0.5) {
            int x_left = static_cast<int>(detections_reshaped.at<float>(i, 3) * img.cols);
            int y_top = static_cast<int>(detections_reshaped.at<float>(i, 4) * img.rows);
            int x_right = static_cast<int>(detections_reshaped.at<float>(i, 5) * img.cols);
            int y_bottom = static_cast<int>(detections_reshaped.at<float>(i, 6) * img.rows);

            rectangle(img, Point(x_left, y_top), Point(x_right, y_bottom), Scalar(0, 0, 255), 2);
        }
    }

    // Display the resulting image
    imshow("Image", img);
    waitKey();
}

int main()
{
    TestOpenVinoModel();

    return 0;
}

enter image description here

我从源代码构建了 OpenVino,然后构建了 OpenCV。我添加了 OpenCV 所需的所有库。 我在 Visual Studio 2022 中使用运行时库多线程 DLL (/MD) 开发程序。

opencv 编译器错误 链接器 链接器错误 openvino

评论


答:

2赞 eltio 3/8/2023 #1

PathIsRelativeA 是 中的 Windows API 函数。
在项目属性中添加到链接器输入后,应解决该问题:“链接器>输入>其他依赖项>配置属性”
Shlwapi.dllShlwapi.lib
enter image description here

或通过以下编译指示:

#pragma comment(lib, "Shlwapi.lib")

阅读更多:如何在 Visual Studio 中使用 C++ shlwapi 库?

评论

0赞 tridjam 3/9/2023
我尝试下载此库并将其添加到项目中,然后将属性添加到链接器中。但这无济于事。我做错了什么?
0赞 eltio 3/10/2023
您无需下载此库。只需将该行添加到“其他依赖项”并重新生成项目即可。Shlwapi.lib
0赞 tridjam 3/10/2023
我按照你的建议做了,但没有帮助。我想我应该以某种方式将这个库添加到项目中。我怎么能不下载它?
1赞 Ofek Shilon 3/18/2023
@tridjam 该库随 Windows 一起提供,您不需要(也不能)下载它。添加链接器依赖项时需要注意的一点是,要对所有项目配置执行此操作。