报错误:relocation R_x86_64_PC32 against symbol '_ZaddKernelPkfs0_iPf' can not be uused when making ashared objet : recompili with -fPIC
解决方法:
NVCCFLAGS += -xCompiler -fPIC
cuda.commands= nvcc $$NVCCFLAGS $$NVCCOPTIONS $$CUDA_INC $$CUDA_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME} 2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2
整体的编译配置内容:
CUDA_DIR = $(QTDIR) #QTDIR为环境变量,为了使QtCreator 正常读取环境变量,使用qtcreator.sh启动
CUDA_LIBS = -lcudart
INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib64
LIBS += $$CUDA_LIBS
CUDA_SOURCES += HelloCuda.cu
#CUDA编译器配置
#GPU架构
SYSTEM_TYPE = 64
CUDA_ARCH = sm_61
NVCCOPTIONS = -use_fast_math -O2
#调试模式下,-g 表示将CPU代码(host)编译成可调式版本,-G表示将GPU代码(kernel)编译成可调式版本。
debug{
NVCCOPTIONS += -g -G
}
CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ')
NVCCFLAGS += -xCompiler -fPIC
cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}_cuda.o
cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCCFLAGS $$NVCCOPTIONS $$CUDA_INC $$CUDA_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME} 2>&1 | sed -r \"s/\\(([0-9]+)\\)/:\\1/g\" 1>&2
cuda.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda