我正在尝试将Qt与CUDA集成。我正在研究Ubuntu 12.04。我已经安装了CUDA和Qt。
我按照这里的步骤 - 'linker input file unused because linking not done' when trying to setup QT creator & Cuda
然而它仍然给我一个错误。
我是这样做的。
我在我的主目录中创建了一个名为“CUDA2”的空Qt项目。
我添加了以下文件
cuda_interface.cu
// CUDA-C includes
#include <cuda.h>
extern "C"
void runCudaPart();
// Main cuda function
void runCudaPart() {
// all your cuda code here *smile*
}
的main.cpp
#include <QtCore/QCoreApplication>
extern "C"
void runCudaPart();
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
runCudaPart();
return a.exec();
}
我将以下行添加到.pro文件
QT += core
QT -= gui
TARGET = cuda2
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
# Source files for C/C++ compiler
SOURCES += main.cpp
# project build directories
DESTDIR = $$system(pwd)
OBJECTS_DIR = $$DESTDIR/Obj
# and C/C++ flags
QMAKE_CFLAGS_RELEASE =-O3
QMAKE_CXXFLAGS_RELEASE =-O3
# cuda source
CUDA_SOURCES += cuda_interface.cu
# Path to cuda toolkit install
CUDA_DIR = /usr/local/cuda
INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib
# GPU architecture
CUDA_ARCH = sm_20
# NVCC flags
NVCCFLAGS = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v
# Path to libraries
LIBS += -lcudart -lcuda
# join the includes in a line
CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ')
cuda.commands = $$CUDA_DIR/bin/nvcc -m64 -O3 -arch=$$CUDA_ARCH -c $$NVCCFLAGS $$CUDA_INC $$LIBS ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
cuda.dependcy_type = TYPE_C
cuda.depend_command = $$CUDA_DIR/bin/nvcc -O3 -M $$CUDA_INC $$NVCCFLAGS ${QMAKE_FILE_NAME}
cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}_cuda.o
# Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_COMPILERS += cuda
我运行qmake来生成makefile。当我点击'build'时,我收到此错误 -
13:33:35: Running build steps for project CUDA2...
13:33:35: Configuration unchanged, skipping qmake step.
13:33:35: Starting: "/usr/bin/make" -w
make: Entering directory `/home/alex/CUDA2'
Makefile:541: warning: overriding commands for target `Obj/main.o'
Makefile:538: warning: ignoring old commands for target `Obj/main.o'
/usr/local/cuda/bin/nvcc -m64 -O3 -arch=sm_20 -c --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v -I/usr/local/cuda/include -lcudart -lcuda cuda_interface.cu -o Obj/cuda_interface_cuda.o
ptxas info : Compiling entry function '__cuda_dummy_entry__' for 'sm_20'
ptxas info : Used 2 registers, 32 bytes cmem[0]
g++ -c -pipe -O3 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB - DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore - I/usr/include/qt4 -I/usr/local/cuda/include -I. -o Obj/main.o main.cpp
gcc -c -pipe -O3 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB - DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore - I/usr/include/qt4 -I/usr/local/cuda/include -I. -o Obj/cuda_interface.o cuda_interface.cu
gcc: warning: cuda_interface.cu: linker input file unused because linking not done
g++ -Wl,-O1 -o cuda2 Obj/cuda_interface_cuda.o Obj/main.o Obj/main.o Obj/cuda_interface.o -L/usr/local/cuda/lib -L/usr/lib/x86_64-linux-gnu -lcudart -lcuda - lQtCore -lpthread
g++: error: Obj/cuda_interface.o: No such file or directory
make: *** [cuda2] Error 1
make: Leaving directory `/home/alex/CUDA2'
13:33:36: The process "/usr/bin/make" exited with code 2.
Error while building project CUDA2 (target: Desktop)
When executing build step 'Make'
我不确定.pro文件是否适用于Linux。看起来它是为OSX制作的。 另外,我不知道CUDA_ARCH = sm_20这条线是否正确。有没有办法找到我的gpu架构?我使用的是NVIDIA Quadro FX 380M
我做错了什么?
谢谢!
答案 0 :(得分:3)
根据评论,您的.pro文件存在一些“常见错误”。
首先,CUDA工具包将库目录分开为32位和64位。因此,您需要按如下方式调整QMAKE_LIBDIR:
QMAKE_LIBDIR += $$CUDA_DIR/lib64 # for 64bits operating system
或
QMAKE_LIBDIR += $$CUDA_DIR/lib # for 32bits operating system
不要将.cu文件作为SOURCES包含在.pro文件中,因为它们不是用g ++编译的。您的问题的.pro文件没有显示这种情况,但您评论说.t文件在Qt中的项目中删除了它们。
最后,为确保所有更改生效,请在QT Creator IDE菜单中执行以下操作:
PS:正如@aland评论的那样,你的GPU设备计算能力是1.2,所以调整CUDA_ARCH = sm_12。
答案 1 :(得分:0)
这是问题所在:
g ++:错误:Obj / cuda_interface.o:没有这样的文件或目录
我会删除您的所有CUDA源代码和库,确保所有内容完全 clean ,并从头开始重新安装。
这是一个很好的指南:
http://laurencedawson.com/ubuntu-11.10-and-cuda-4.1
&lt; =假设您已经安装了Ubuntu和NVidia驱动程序,那么只需重新安装并重建CUDA工具包和源代码。
忘记Qt并忘记你的图形IDE,直到你开始工作。
请从命令行重新安装并重建CUDA。
确保在返回Qt和IDE之前可以从命令行运行“deviceQuery”。
另一个好资源: