我寫了一個PRO文件來爲我的CUDA應用程序在linux下生成一個GUI(已經在windows下編譯,現在將相同的組件移植到ubuntu 1404)。鏈接Qt + CUDA +外部庫
我已經第一次編譯了一個輔助函數庫「mylib.a」,並將其與我的應用程序「myapp.cu」連接起來,並測試它編譯並在圖片中沒有Qt的情況下很好地運行(通過nsight eclipse完成)。
對於使用Qt構建我已經生成以下文件PRO:
#############################
# basic PRO file for qmake
##############################
# QT libs to use
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
##########################################
# QT basic files
##########################################
SOURCES+=main.cpp
SOURCES+=myGUI.cpp
HEADERS += myGUI.h
FORMS += myGUI.ui
# Project dir and outputs
PROJECT_DIR = $$system(pwd)
OBJECTS_DIR = $$PROJECT_DIR/Obj
DESTDIR = ../bin
##########################################
# CUDA source files
##########################################
CUDA_SOURCES += myApp.cu
CUDA_SOURCES += kernel1.cu
CUDA_SOURCES += kernel2.cu
##########################################
# CUDA related components
##########################################
CUDA_DIR = /usr/local/cuda
CUDA_ARCH = sm_35
NVCCFLAGS = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v
##########################################
# include paths
##########################################
# CUDA
INCLUDEPATH += $$CUDA_DIR/include
# Additional dependencies
INCLUDEPATH += /usr/include/
##########################################
# library directories
##########################################
QMAKE_LIBDIR += $$CUDA_DIR/lib64
QMAKE_LIBDIR += $$CUDA_DIR/samples/common/lib
##########################################
# LIBS
##########################################
LIBS += -lnvToolsExt
LIBS += -lopengl
#libcudart_static
#LIBS += -lcudart_static
LIBS += -lcuda
LIBS += -lcudart
LIBS += -lGL
# My library is added here
LIBS += -lmyLib
# join the includes in a line
CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ')
##########################################
# Extra compiler configuration for CUDA
##########################################
cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}.o
cuda.commands = $$CUDA_DIR/bin/nvcc $$CUDA_DEFINES -m64 -g -arch=$$CUDA_ARCH -c $$NVCCFLAGS $$CUDA_INC $$LIBS ${QMAKE_FILE_NAME} -c -o ${QMAKE_FILE_OUT}
cuda.dependency_type = TYPE_C
cuda.depend_command = $$CUDA_DIR/bin/nvcc $$CUDA_DEFINES -g -M $$CUDA_INC $$NVCCFLAGS ${QMAKE_FILE_NAME}
# Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_UNIX_COMPILERS += cuda
這看起來像一個簡單的鏈接順序問題。嘗試在*依賴關係之前指定您的庫*,而不是在它們之後 – talonmies 2014-11-20 20:18:23
我很確定我有相同的想法,並最終將它從列表的前端(頂部)移動到後端(底部),以查看訂單是否造成這種情況(我遠離開發機ATM,但我很確定我嘗試過)。 – 2014-11-20 20:21:32
如果您可以捕獲正在生成的實際鏈接命令以及您所摘錄的錯誤消息的完整輸出,則可能會更容易進行診斷。 – 2014-11-20 20:59:30