QT+ Libtorch Microsoft C++ 异常: std::length_error

        visual studio编译qt+libtorch,载入模型时报错。

出错信息:

        使用visual studio 编译QT+libtorch报错

未加载kernelbase.pdb,kernelbase.pdb 包含查找模块 KernelBase.dll 的源文件所需的调试信息。

0x00处(位于 view64.exe 中)有未经处理的异常: Microsoft C++ 异常: std::length_error,位于内存位置 0x00 处。

原因:

        libtorch版本与QT编译器不匹配。例如,Debug版本的libtorch必须使用QT Debug版本进行编译。如果不匹配,有些功能例如tensor可以正常使用,但是加载模块MODULE时会报错。

解决方法:

        修改QT编译器或Libtorch编译版本,使其一致。

可以用以下代码测试

#undef slots
#include<torch/script.h>
#include<torch/torch.h>
#define slots Q_SLOTS

int main(int argc, char* argv[])
{
    //test torch
    auto device = torch::Device(torch::kCUDA);
    auto model = ConvReluBn(3, 4, 3);//自己写好的模块
    
    //test qt
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以看出Qt是一个跨平台的C++应用程序开发框架,而std::thread是C++11标准库中的线程库。两者都可以用于多线程编程,但是使用方法和实现方式有所不同。 在Qt中,可以使用QThread类来创建和管理线程。QThread类提供了一些虚函数,如run()、start()、wait()等,可以方便地实现线程的创建、启动和等待。此外,Qt还提供了信号和槽机制,可以用于线程间的通信。 而在C++11标准库中,可以使用std::thread类来创建和管理线程。std::thread类的使用方法与QThread类有所不同,要传入一个可调用对象作为线程的入口函数,并且要手动管理线程的启动和等待。此外,C++11标准库中也提供了一些同步原语,如mutex、condition_variable等,可以用于线程间的同步和通信。 下面是一个使用Qtstd::thread分别创建线程的例子: 使用Qt创建线程: ```cpp #include <QCoreApplication> #include <QThread> class MyThread : public QThread { public: virtual void run(); }; void MyThread::run() { for (int count = 0; count < 10; count++) { sleep(1); qDebug("ping %d", count); } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); MyThread thA; thA.start(); thA.wait(); puts("thread A is over."); return a.exec(); } ``` 使用std::thread创建线程: ```cpp #include <iostream> #include <thread> void thread_func() { for (int count = 0; count < 10; count++) { std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "ping " << count << std::endl; } } int main() { std::thread thA(thread_func); thA.join(); std::cout << "thread A is over." << std::endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值