与 CUDA 库链接时无法在 Qt 创建器下调试 cpp 代码

Can't debug cpp code under Qt Creator when linking with CUDA libs

本文关键字:创建 调试 代码 cpp Qt CUDA 链接      更新时间:2023-10-16


我在调试一个简单的cpp代码时遇到了问题(它调用了一些CUDA函数,如cuInit()、cuDeviceGetCount()..)。当我在CPP代码中放入一个断点并开始调试时,我会得到以下消息:

这似乎不是一个"调试"版本。

当我删除所有CUDA调用,并且不将程序链接到CUDA.lib和cudart.lib时,代码是可调试的(可以在断点处停止程序,并且不会显示错误消息)。

这是我的CPP代码:

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <cuda.h>
#include <builtin_types.h>
int main(int argc, char* argv [])
{
    QCoreApplication(argc, argv);
    int deviceCount = 0;
    int cudaDevice = 0;
    char cudaDeviceName [100];
    cuInit(0);
    cuDeviceGetCount(&deviceCount);
    cuDeviceGet(&cudaDevice, 0);
    cuDeviceGetName(cudaDeviceName, 100, cudaDevice);
    qDebug() << "Number of devices: " << deviceCount;
    qDebug() << "Device name:" << cudaDeviceName;
}

这是我的.pro文件:

QT       += core
QT       -= gui
TARGET = cudatest
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp    
#################################
# Begin CUDA configuration
win32 {
    CUDA_PATH = "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v6.5"
    CUDA_INC_DIR = $$CUDA_PATH/include
    contains(QMAKE_TARGET.arch, x86_64) {
        SYSTEMNAME = x64
        SYSTEMTYPE = 64
    } else {
        SYSTEMNAME = Win32
        SYSTEMTYPE = 32
    }
    CUDA_LIB_DIR = $$CUDA_PATH/lib/$$SYSTEMNAME
    QMAKE_CXXFLAGS_RELEASE -= -MD
    QMAKE_CXXFLAGS_RELEASE += -MT
    QMAKE_CXXFLAGS_DEBUG -= -MDd
    QMAKE_CXXFLAGS_DEBUG += -MTd
}
INCLUDEPATH +=  $$CUDA_INC_DIR
LIBS += -L$$CUDA_LIB_DIR -lcuda -lcudart
#End CUDA configuration
########################

环境:

Qt创建者3.2.2
CUDA v6.5
CPP编译器:VC++2013速成版
调试器:C:\Program Files(x86)\Windows Kits\8.1\Deggers\x86\cdb.exe
Qt 5.3.2(由VC++2013编译,32位)

我试着用VC++2010 Profesional做同样的事情,得到了同样的结果。

有人能给我一个建议吗?问题出在哪里
非常感谢。

这可能是因为您使用的是Visual Express 2013。这里说,CUDA v6.5没有对VS 2013 Express的编译器支持(在表2中。CUDA 6.5中的Windows编译器支持)您需要安装Visual Studio的完整版本。