【发布时间】:2015-01-18 17:32:39
【问题描述】:
我已经编写了一个 PRO 文件来为我在 linux 下的 CUDA 应用程序生成一个 GUI(已经在 windows 下编译,现在将相同的组件移植到 ubuntu 1404)。
我首先编译了一个帮助程序库“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
【问题讨论】:
-
这看起来像一个简单的链接顺序问题。尝试在依赖项之前指定您的库,而不是在它们之后
-
我很确定我有同样的想法并最终将它从列表的前面(顶部)移动到后面(底部),以查看订单是否导致了这种情况(我远离开发机器 ATM,但我很确定我试过这个)。
-
如果您可以捕获正在生成的实际链接命令以及您摘录的错误消息的完整输出,这可能会更容易诊断。
-
@RobertCrovella,添加了 make 命令和链接输出。请注意,输出是在第一个失败的命令之后,并从链接阶段输出问题。
-
我能够通过将 myLib.a 的组件添加到 CUDA_SOURCES 中来构建。虽然这可行,但就构建时间和应用程序二进制大小而言,它不是最佳解决方案......