2014-11-20 115 views
2

我寫了一個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 
+0

這看起來像一個簡單的鏈接順序問題。嘗試在*依賴關係之前指定您的庫*,而不是在它們之後 – talonmies 2014-11-20 20:18:23

+0

我很確定我有相同的想法,並最終將它從列表的前端(頂部)移動到後端(底部),以查看訂單是否造成這種情況(我遠離開發機ATM,但我很確定我嘗試過)。 – 2014-11-20 20:21:32

+1

如果您可以捕獲正在生成的實際鏈接命令以及您所摘錄的錯誤消息的完整輸出,則可能會更容易進行診斷。 – 2014-11-20 20:59:30

回答

1

在你的.pro文件中嘗試這些。我用它鏈接到Linux上的CUDA成功:

# Define output directories 

CONFIG(release, debug|release): CUDA_OBJECTS_DIR = release/cuda 
else: CUDA_OBJECTS_DIR = debug/cuda 


# This makes the .cu files appear in your project 
OTHER_FILES += vectorAddition.cu 

# CUDA settings <-- may change depending on your system 
CUDA_SOURCES += vectorAddition.cu 


unix{ 
    CUDA_SDK = "/usr/local/cuda-5.5/" # Path to cuda SDK install 
    CUDA_DIR = "/usr/local/cuda-5.5/" # Path to cuda toolkit install 
} 

unix: SYSTEM_NAME = unix 

SYSTEM_TYPE = 32   # '32' or '64', depending on your system 
CUDA_ARCH = sm_30   # Type of CUDA architecture, for example 'compute_10', 'compute_11', 'sm_10' 
NVCC_OPTIONS = --use_fast_math 

# include paths 
INCLUDEPATH += $$CUDA_DIR/include 
       #$$CUDA_SDK/common/inc/ \ 
       #$$CUDA_SDK/../shared/inc/ 

# library directories 
unix:{ 
    QMAKE_LIBDIR += $$CUDA_DIR/lib 
} 


# Add the necessary libraries 
unix: 
{ 
    CUDA_LIBS = -lcuda -lcudart 
    # The following makes sure all path names (which often include spaces) are put between quotation marks 
    CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"') 
    NVCC_LIBS = $$join(CUDA_LIBS,' -l','-l', '') 
    LIBS += $$CUDA_LIBS 
} 

# Configuration of the Cuda compiler 
CONFIG(debug, debug|release) { 
    # Debug mode 
    cuda_d.input = CUDA_SOURCES 
    cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o 

    unix: cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -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 = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o 

    unix: cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME} 

    cuda.dependency_type = TYPE_C 
    QMAKE_EXTRA_COMPILERS += cuda 
} 
+0

謝謝Nejat。據我可以告訴你的配置不會添加任何新的元素到我的初始PRO文件,除非不添加depends_command,我也從我的(從未注意到任何區別)刪除。 – 2014-11-23 15:23:39