C++ &引用;“无法识别文件格式”;使用qmake使用nvcc和gcc编译CUDA代码时
我必须在我的项目中创建以下两个文件:C++ &引用;“无法识别文件格式”;使用qmake使用nvcc和gcc编译CUDA代码时,c++,qt,gcc,cuda,nvcc,C++,Qt,Gcc,Cuda,Nvcc,我必须在我的项目中创建以下两个文件: home/cuda_compilation_test/ main.cpp libcudatest.cu cuda_compilation_test.pro 我正在使用QtCreator和qmake进行编译。但是,当我使用下面显示的项目文件构建项目时,我收到一个链接错误无法识别文件格式;作为链接器脚本处理。 尽管如此,它还是在调试目录中生成了两个对象文件 home/build-cuda_compilation_test-Desktop
home/cuda_compilation_test/
main.cpp
libcudatest.cu
cuda_compilation_test.pro
我正在使用QtCreator和qmake进行编译。但是,当我使用下面显示的项目文件构建项目时,我收到一个链接错误无法识别文件格式;作为链接器脚本处理。
尽管如此,它还是在调试目录中生成了两个对象文件
home/build-cuda_compilation_test-Desktop-Debug/
main.o
libcudatest.o
我怎么能
g++ -m64 -o cuda_compilation_test_2 libcudatest.o main.o -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64 -lcudart -lcudatest -lQtGui -lQtCore -lpthread
/usr/bin/ld:libcudatest.o: file format not recognized; treating as linker script
/usr/bin/ld:libcudatest.o:1: syntax error
collect2: error: ld returned 1 exit status
make: *** [cuda_compilation_test_2] Error 1
11:19:20: The process "/usr/bin/make" exited with code 2.
以及项目文件:
TEMPLATE =
# Files
SOURCES += main.cpp
OTHER_FILES += libcudatest.cu
LIBS += -L/usr/local/cuda/lib64
LIBS += -lcudart -lcudatest
# CUDA path
CUDA_DIR = /usr/local/cuda
CUDA_CC = $$CUDA_DIR/bin/nvcc
# CUDA Setup
CUDA_SOURCES = libcudatest.cu
NVCCINCLUDES +=
NVCCFLAGS = --shared -arch sm_35 -Xcompiler -fPIC --ptxas-options=-v
INCLUDEPATH +=
LIBS +=
# Configuration of the Cuda compiler
# http://doc.qt.io/qt-4.8/qmake-environment-reference.html#customizing
CONFIG(debug, debug|release) {
# Debug mode
cuda_d.input = CUDA_SOURCES
cuda_d.output = ${QMAKE_FILE_BASE}.o
cuda_d.commands = $$CUDA_CC -D_DEBUG $$NVCCFLAGS $$NVCCINCLUDES $$LIBS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda_d.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
# Release mode
cuda.input = CUDA_SOURCES
cuda.output = ${QMAKE_FILE_BASE}.o
cuda.commands = $$CUDA_CC $$NVCCFLAGS $$NVCCINCLUDES $$LIBS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda
}
我正在尝试在linux上编译
非常感谢您在这个主题上提供的帮助。我对qt或qmake一无所知。但是我认为链接器被以下事实绊倒了:你告诉
nvcc
用--shared
开关将libcudatest.cu
编译成一个共享对象(通常在.so
文件中),但你指定的输出文件是.o
。尝试将您的libcudatest.o
重命名为libcudatest.so
,然后重复带有该更改的链接命令:g++-m64-o cuda_编译_测试_2; libcudatest.so main.o-L/usr/lib/x86_64-linux-gnu-L/usr/local/cuda/lib64-lcudart-lcudatest-lQtGui-lQtCore-lpthread
,如果有效,然后它会确认。你能让它工作吗?我对qt或qmake一无所知。但是我认为链接器被以下事实绊倒了:你告诉nvcc
用--shared
开关将libcudatest.cu
编译成一个共享对象(通常在.so
文件中),但你指定的输出文件是.o
。尝试将您的libcudatest.o
重命名为libcudatest.so
,然后重复带有该更改的链接命令:g++-m64-o cuda_编译_测试_2; libcudatest.so main.o-L/usr/lib/x86_64-linux-gnu-L/usr/local/cuda/lib64-lcudart-lcudatest-lQtGui-lQtCore-lpthread
,如果有效,然后它会确认。你能让它工作吗?