C++ 程序崩溃,仅在使用特定的 ArrayFire 库时没有错误消息

C++ program crash with no error message only when using a particular library of ArrayFire

提问人:Balfar 提问时间:7/19/2022 最后编辑:Balfar 更新时间:7/20/2022 访问量:330

问:

我正在尝试使用ArrayFire库,一切正常(请参阅上面的工作示例),但是只有在使用特定库时才有问题。问题是,当我的程序崩溃时,我没有消息错误,编译也没有发回任何消息。af.lib

可重现的代码和/或步骤(工作)

  1. 添加到项目属性 -> C/C++ -> 常规 -> 其他包含目录$(AF_PATH)/include;
  2. 添加到项目属性 -> 链接器 -> 常规 -> 其他库目录$(AF_PATH)/lib;
  3. 添加到项目属性 -> 链接器 -> 输入 ->其他依赖项afcpu.lib;

以下是使用的代码:

#include <iostream>
#include <arrayfire.h>

int main()
{
    std::cout << "Main running..." << std::endl;
    
    std::cout << "Available backends: " << af::getAvailableBackends() << std::endl;

   for (int i = 0; i <  af::getDeviceCount();  i++) {
        af::setDevice(i);
        af::info();
    }

    return 0;
}

输出如下:

Main running...
Available backends: 1
ArrayFire v3.8.2 (CPU, 64-bit Windows, build 5752f2dc)
[0] Intel: Intel(R) Core(TM) i5-3337U CPU @ 1.80 GHz

可重现的代码和/或步骤(不起作用)

  1. 添加到项目属性 -> C/C++ -> 常规 -> 其他包含目录$(AF_PATH)/include;
  2. 添加到项目属性 -> 链接器 -> 常规 -> 其他库目录$(AF_PATH)/lib;
  3. 添加到项目属性 -> 链接器 -> 输入 ->其他依赖项af.lib;

以下是使用的代码:

#include <iostream>
#include <arrayfire.h>

int main()
{
    std::cout << "Main running..." << std::endl;

    try
    {
        std::cout << "Available backends: " << af::getAvailableBackends() << std::endl;
    }
    catch (af::exception& e)
    {
        std::cout << "Caught exception trying reading backends" << std::endl;
        std::cerr << e.what() << std::endl;
    }

    af::setBackend(AF_BACKEND_CPU);
    for (int i = 0; i <  af::getDeviceCount();  i++) {
        af::setDevice(i);
        af::info();
    }

    af::setBackend(AF_BACKEND_CUDA);
    for (int i = 0; i <  af::getDeviceCount();  i++) {
        af::setDevice(i);
        af::info();
    }

    af::setBackend(AF_BACKEND_OPENCL);
    for (int i = 0; i <  af::getDeviceCount();  i++) {
        af::setDevice(i);
        af::info();
    }

    return 0;
}

输出如下:

Main running...

如果我使用 Visual Studio 调试器运行它,则会出现以下错误:

Unhandled exception at 0x00007FF90AEA4FD9 (KernelBase.dll) in main.exe : 0xC06D007F: Procedure not found (parameters : 0x000000D5546FD0F0).

启用 Microsoft 或 NuGet 符号服务器无法解决错误。

系统信息

Windows 10 64 位 - Intel Core i5-3337U @ 1.80 GHz - Visual Studio Community 2019 16.11.11 - ArrayFire 3.8.2 (CUDA 11.4)

Visual Studio 配置:发布,x64

C++ 可视化工作室 ArrayFire

评论

0赞 Yujian Yao - MSFT 7/20/2022
如果方便的话,您能否将您使用的库上传到 Github 并在此处分享?以及您创建了什么项目。
0赞 Balfar 7/20/2022
当然,我在帖子的开头添加了 GitHub。目前,我只是想用它来做实验,但最终的目标是制作一个并行的光线追踪引擎。
0赞 n. m. could be an AI 7/20/2022
“0xC06D007F:找不到过程”可能意味着存在一个程序或 DLL,该程序或 DLL 在一个平台上生成(或针对一组 DLL 依赖项),并部署在另一个平台(或具有另一组 DLL 依赖项)上。
0赞 Yujian Yao - MSFT 7/21/2022
您共享的链接中似乎没有 Lib 文件夹,因此我无法将库添加到项目中。

答: 暂无答案