2013-07-01 173 views
-1

我想編譯火星爲cuda 4.2.9(cuda 5.0淘汰了很多火星使用的頭文件)。 5.0以下的版本似乎利用這個怪異的makefile common.mk,並且我很難配置它以使代碼正常工作。目標文件編譯得很好,但我得到這個錯誤:CUDA collect2 ld返回1退出狀態

/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lcutil_x86_64 
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lshrutil_x86_64 
collect2: ld returned 1 exit status 
make: *** [/home/ian/code/cuda-4.2.9/C/bin/linux/release/MatrixMul] Error 1 

爲什麼會發生這種情況?我該如何補救?

這裏是MatrixMul生成文件:

# Basic directory setup for SDK 
# (override directories only if they are not already defined) 
SRCDIR  ?= 
ROOTDIR ?= /home/ian/code/cuda-4.2.9 
ROOTBINDIR ?= $(ROOTDIR)/C/bin 
BINDIR  ?= $(ROOTBINDIR)/$(OSLOWER) 
ROOTOBJDIR ?= obj 
LIBDIR  := $(ROOTDIR)/C/lib 
COMMONDIR := $(ROOTDIR)/C/common 
SHAREDDIR := $(ROOTDIR)/shared/ 

原始值:

# Basic directory setup for SDK 
# (override directories only if they are not already defined) 
SRCDIR  ?= 
ROOTDIR ?= .. 
ROOTBINDIR ?= $(ROOTDIR)/../bin 
BINDIR  ?= $(ROOTBINDIR)/$(OSLOWER) 
ROOTOBJDIR ?= obj 
LIBDIR  := $(ROOTDIR)/../lib 
COMMONDIR := $(ROOTDIR)/../common 
SHAREDDIR := $(ROOTDIR)/../shared/ 

而且整個共同

################################################################################ 
# 
# Build script for project 
# 
################################################################################ 

# Add source files here 
EXECUTABLE  := MatrixMul 
# Cuda source files (compiled with cudacc) 
CUFILES   := main.cu MarsLib.cu MarsScan.cu MarsSort.cu 
# C/C++ source files (compiled with gcc/c++) 
CCFILES   := MarsUtils.cpp 


################################################################################ 
# Rules and targets 

include ../cuda-4.2.9/C/common/common.mk 

,我編輯的common.mk線。 mk:

################################################################################ 
# 
# Common build script for CUDA source projects for Linux and Mac platforms 
# 
################################################################################ 

.SUFFIXES : .cu .cu_dbg.o .c_dbg.o .cpp_dbg.o .cu_rel.o .c_rel.o .cpp_rel.o .cubin .ptx 

# Add new SM Versions here as devices with new Compute Capability are released 
SM_VERSIONS := 10 11 12 13 20 21 30 

CUDA_INSTALL_PATH ?= /home/ian/code/cuda-4.2.9/cuda/ 

ifdef cuda-install 
     CUDA_INSTALL_PATH := $(cuda-install) 
endif 

# detect OS 
OSUPPER = $(shell uname -s 2>/dev/null | tr [:lower:] [:upper:]) 
OSLOWER = $(shell uname -s 2>/dev/null | tr [:upper:] [:lower:]) 

# 'linux' is output for Linux system, 'darwin' for OS X 
DARWIN = $(strip $(findstring DARWIN, $(OSUPPER))) 
ifneq ($(DARWIN),) 
    SNOWLEOPARD = $(strip $(findstring 10.6, $(shell egrep "<string>10\.6" /System/Library/CoreServices/SystemVersion.plist))) 
    LION  = $(strip $(findstring 10.7, $(shell egrep "<string>10\.7" /System/Library/CoreServices/SystemVersion.plist))) 
endif 

# detect 32-bit or 64-bit platform 
HP_64 = $(shell uname -m | grep 64) 
OSARCH= $(shell uname -m) 

# Basic directory setup for SDK 
# (override directories only if they are not already defined) 
SRCDIR  ?= 
ROOTDIR ?= /home/ian/code/cuda-4.2.9/cuda/C 
ROOTBINDIR ?= $(ROOTDIR)/bin 
BINDIR  ?= $(ROOTBINDIR)/$(OSLOWER) 
ROOTOBJDIR ?= obj 
LIBDIR  := $(ROOTDIR)/lib 
COMMONDIR := $(ROOTDIR)/common 
SHAREDDIR := $(ROOTDIR)/../shared/ 

# Compilers 
NVCC  := $(CUDA_INSTALL_PATH)/bin/nvcc 
CXX  := g++ -fPIC 
CC   := gcc -fPIC 
LINK  := g++ -fPIC 
# Includes 
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include -I$(COMMONDIR)/inc -I$(SHAREDDIR)/inc 

# Warning flags 
CXXWARN_FLAGS := \ 
     -W -Wall \ 
     -Wimplicit \ 
     -Wswitch \ 
     -Wformat \ 
     -Wchar-subscripts \ 
     -Wparentheses \ 
     -Wmultichar \ 
     -Wtrigraphs \ 
     -Wpointer-arith \ 
     -Wcast-align \ 
     -Wreturn-type \ 
     -Wno-unused-function \ 
     $(SPACE) 

CWARN_FLAGS := $(CXXWARN_FLAGS) \ 
     -Wstrict-prototypes \ 
     -Wmissing-prototypes \ 
     -Wmissing-declarations \ 
     -Wnested-externs \ 
     -Wmain \ 

# architecture flag for nvcc and gcc compilers build 
CUBIN_ARCH_FLAG := 
CXX_ARCH_FLAGS := 
NVCCFLAGS  := 
LIB_ARCH  := $(OSARCH) 

# Determining the necessary Cross-Compilation Flags 
# 32-bit OS, but we target 64-bit cross compilation 
ifeq ($(x86_64),1) 
    NVCCFLAGS  += -m64 
    LIB_ARCH   = x86_64 
    ifneq ($(DARWIN),) 
     CXX_ARCH_FLAGS += -arch x86_64 
    else 
     CXX_ARCH_FLAGS += -m64 
    endif 
else 
# 64-bit OS, and we target 32-bit cross compilation 
    ifeq ($(i386),1) 
     NVCCFLAGS  += -m32 
     LIB_ARCH   = i386 
     ifneq ($(DARWIN),) 
      CXX_ARCH_FLAGS += -arch i386 
     else 
      CXX_ARCH_FLAGS += -m32 
     endif 
    else 
     ifeq "$(strip $(HP_64))" "" 
      LIB_ARCH  = i386 
      NVCCFLAGS  += -m32 
      ifneq ($(DARWIN),) 
       CXX_ARCH_FLAGS += -arch i386 
     else 
      CXX_ARCH_FLAGS += -m32 
     endif 
    else 
     ifeq "$(strip $(HP_64))" "" 
      LIB_ARCH  = i386 
      NVCCFLAGS  += -m32 
      ifneq ($(DARWIN),) 
       CXX_ARCH_FLAGS += -arch i386 
      else 
       CXX_ARCH_FLAGS += -m32 
      endif 
     else 
      LIB_ARCH  = x86_64 
      NVCCFLAGS  += -m64 
      ifneq ($(DARWIN),) 
       CXX_ARCH_FLAGS += -arch x86_64 
      else 
       CXX_ARCH_FLAGS += -m64 
      endif 
     endif 
    endif 
endif 

# Compiler-specific flags (by default, we always use sm_10, sm_20, and sm_30), unless we use the SMVERSION template 
GENCODE_SM10 := -gencode=arch=compute_10,code=\"sm_10,compute_10\" 
GENCODE_SM20 := -gencode=arch=compute_20,code=\"sm_20,compute_20\" 
GENCODE_SM30 := -gencode=arch=compute_30,code=\"sm_30,compute_30\" 

CXXFLAGS += $(CXXWARN_FLAGS) $(CXX_ARCH_FLAGS) 
CFLAGS += $(CWARN_FLAGS) $(CXX_ARCH_FLAGS) 
LINKFLAGS += 
LINK  += $(LINKFLAGS) $(CXX_ARCH_FLAGS) 

# This option for Mac allows CUDA applications to work without requiring to set DYLD_LIBRARY_PATH 
ifneq ($(DARWIN),) 
    LINK += -Xlinker -rpath $(CUDA_INSTALL_PATH)/lib 
endif 

# Common flags 
COMMONFLAGS += $(INCLUDES) -DUNIX 

# If we are enabling GPU based debugging, then we want to use -G, warning that this 
# May have a significant impact on GPU device code, since optimizations are turned off 
ifeq ($(gpudbg),1) 
    NVCCFLAGS += -G 
     dbg = $(gpudbg) 
endif 

# Debug/release configuration 
ifeq ($(dbg),1) 
     COMMONFLAGS += -g 
    NVCCFLAGS += -D_DEBUG 
     CXXFLAGS += -D_DEBUG 
     CFLAGS  += -D_DEBUG 
     BINSUBDIR := debug 
     LIBSUFFIX := D 
else 
     COMMONFLAGS += -O2 
     BINSUBDIR := release 
     LIBSUFFIX := 
     NVCCFLAGS += --compiler-options -fno-strict-aliasing 
     CXXFLAGS += -fno-strict-aliasing 
     CFLAGS  += -fno-strict-aliasing 
endif 

# architecture flag for cubin build 
CUBIN_ARCH_FLAG := 

# OpenGL is used or not (if it is used, then it is necessary to include GLEW) 
ifeq ($(USEGLLIB),1) 
    ifneq ($(DARWIN),) 
     OPENGLLIB := -L/System/Library/Frameworks/OpenGL.framework/Libraries 
     OPENGLLIB += -lGL -lGLU $(COMMONDIR)/lib/$(OSLOWER)/libGLEW.a 
    else 
# this case for linux platforms 
     OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu 
# check if x86_64 flag has been set, otherwise, check HP_64 is i386/x86_64 
     ifeq ($(x86_64),1) 
       OPENGLLIB += -lGLEW_x86_64 -L/usr/X11R6/lib64 
     else 
      ifeq ($(i386),) 
       ifeq "$(strip $(HP_64))" "" 
        OPENGLLIB += -lGLEW -L/usr/X11R6/lib 
       else 
        OPENGLLIB += -lGLEW_x86_64 -L/usr/X11R6/lib64 
       endif 
      endif 
     endif 
# check if i386 flag has been set, otehrwise check HP_64 is i386/x86_64 
     ifeq ($(i386),1) 
       OPENGLLIB += -lGLEW -L/usr/X11R6/lib 
     else 
      ifeq ($(x86_64),) 
       ifeq "$(strip $(HP_64))" "" 
        OPENGLLIB += -lGLEW -L/usr/X11R6/lib 
       else 
        OPENGLLIB += -lGLEW_x86_64 -L/usr/X11R6/lib64 
       endif 
      endif 
     endif 
    endif 
endif 
ifeq ($(USEGLUT),1) 
    ifneq ($(DARWIN),) 
     OPENGLLIB += -framework GLUT 
    else 
     ifeq ($(x86_64),1) 
      OPENGLLIB += -lglut -L/usr/lib64 
     endif 
     ifeq ($(i386),1) 
      OPENGLLIB += -lglut -L/usr/lib 
     endif 

     ifeq ($(x86_64),) 
      ifeq ($(i386),) 
       OPENGLLIB += -lglut 
      endif 
     endif 
    endif 
endif 

ifeq ($(USEPARAMGL),1) 
     PARAMGLLIB := -lparamgl_$(LIB_ARCH)$(LIBSUFFIX) 
endif 

ifeq ($(USERENDERCHECKGL),1) 
     RENDERCHECKGLLIB := -lrendercheckgl_$(LIB_ARCH)$(LIBSUFFIX) 
endif 

ifeq ($(USENVCUVID), 1) 
    ifneq ($(DARWIN),) 
     NVCUVIDLIB := -L../../common/lib/darwin -lnvcuvid 
    endif 
endif 

# Libs 
ifneq ($(DARWIN),) 
    LIB  := -L$(CUDA_INSTALL_PATH)/lib -L$(LIBDIR) -L$(COMMONDIR)/lib/$(OSLOWER) -L$(SHAREDDIR)/lib $(NVCUVIDLIB) 
else 
    ifeq "$(strip $(HP_64))" "" 
    ifeq ($(x86_64),1) 
     LIB  := -L$(CUDA_INSTALL_PATH)/lib64 -L$(LIBDIR) -L$(COMMONDIR)/lib/$(OSLOWER) -L$(SHAREDDIR)/lib 
    else 
     LIB  := -L$(CUDA_INSTALL_PATH)/lib -L$(LIBDIR) -L$(COMMONDIR)/lib/$(OSLOWER) -L$(SHAREDDIR)/lib 
    endif 
    else 
    ifeq ($(i386),1) 
     LIB  := -L$(CUDA_INSTALL_PATH)/lib -L$(LIBDIR) -L$(COMMONDIR)/lib/$(OSLOWER) -L$(SHAREDDIR)/lib 
    else 
     LIB  := -L$(CUDA_INSTALL_PATH)/lib64 -L$(LIBDIR) -L$(COMMONDIR)/lib/$(OSLOWER) -L$(SHAREDDIR)/lib 
    endif 
    endif 
endif 
# If dynamically linking to CUDA and CUDART, we exclude the libraries from the LIB 
ifeq ($(USECUDADYNLIB),1) 
    LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} -ldl -rdynamic 
else 
# static linking, we will statically link against CUDA and CUDART 
    ifeq ($(USEDRVAPI),1) 
    LIB += -lcuda ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} 
    else 
    ifeq ($(emu),1) 
     LIB += -lcudartemu 
    else 
     LIB += -lcudart 
    endif 
    LIB += ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} 
    endif 
endif 

ifeq ($(USECUFFT),1) 
    ifeq ($(emu),1) 
    LIB += -lcufftemu 
    else 
    LIB += -lcufft 
    endif 
endif 

ifeq ($(USECUBLAS),1) 
    ifeq ($(emu),1) 
    LIB += -lcublasemu 
    else 
    LIB += -lcublas 
    endif 
endif 

ifeq ($(USECURAND),1) 
    LIB += -lcurand 
endif 

ifeq ($(USECUSPARSE),1) 
    LIB += -lcusparse 
endif 

# Lib/exe configuration 
# Lib/exe configuration 
# Lib/exe configuration 
ifneq ($(STATIC_LIB),) 
     TARGETDIR := $(LIBDIR) 
     TARGET := $(subst .a,_$(LIB_ARCH)$(LIBSUFFIX).a,$(LIBDIR)/$(STATIC_LIB)) 
     LINKLINE = ar rucv $(TARGET) $(OBJS) 
else 
     ifneq ($(OMIT_CUTIL_LIB),1) 
       LIB += -lcutil_$(LIB_ARCH)$(LIBSUFFIX) 
     endif 
     ifneq ($(OMIT_SHRUTIL_LIB),1) 
       LIB += -lshrutil_$(LIB_ARCH)$(LIBSUFFIX) 
     endif 

     # Device emulation configuration 
     ifeq ($(emu), 1) 
       NVCCFLAGS += -deviceemu 
       CUDACCFLAGS += 
       BINSUBDIR := emu$(BINSUBDIR) 
       # consistency, makes developing easier 
       CXXFLAGS    += -D__DEVICE_EMULATION__ 
       CFLAGS     += -D__DEVICE_EMULATION__ 
     endif 
     TARGETDIR := $(BINDIR)/$(BINSUBDIR) 
     TARGET := $(TARGETDIR)/$(EXECUTABLE) 
     LINKLINE = $(LINK) -o $(TARGET) $(OBJS) $(LIB) 
endif 

# check if verbose 
ifeq ($(verbose), 1) 
     VERBOSE := 
else 
     VERBOSE := @ 
endif 

################################################################################ 
# Check for input flags and set compiler flags appropriately 
################################################################################ 
ifeq ($(fastmath), 1) 
     NVCCFLAGS += -use_fast_math 
endif 

ifeq ($(keep), 1) 
     NVCCFLAGS += -keep 
     NVCC_KEEP_CLEAN := *.i* *.cubin *.cu.c *.cudafe* *.fatbin.c *.ptx 
endif 

ifdef maxregisters 
     NVCCFLAGS += -maxrregcount $(maxregisters) 
endif 

ifeq ($(ptxas), 1) 
     NVCCFLAGS += --ptxas-options=-v 
endif 
# Add cudacc flags 
NVCCFLAGS += $(CUDACCFLAGS) 

# Add common flags 
NVCCFLAGS += $(COMMONFLAGS) 
CXXFLAGS += $(COMMONFLAGS) 
CFLAGS += $(COMMONFLAGS) 

ifeq ($(nvcc_warn_verbose),1) 
     NVCCFLAGS += $(addprefix --compiler-options ,$(CXXWARN_FLAGS)) 
     NVCCFLAGS += --compiler-options -fno-strict-aliasing 
endif 

################################################################################ 
# Set up object files 
################################################################################ 
OBJDIR := $(ROOTOBJDIR)/$(LIB_ARCH)/$(BINSUBDIR) 
OBJS += $(patsubst %.cpp,$(OBJDIR)/%.cpp.o,$(notdir $(CCFILES))) 
OBJS += $(patsubst %.c,$(OBJDIR)/%.c.o,$(notdir $(CFILES))) 
OBJS += $(patsubst %.cu,$(OBJDIR)/%.cu.o,$(notdir $(CUFILES))) 

################################################################################ 
# Set up cubin output files 
################################################################################ 
CUBINDIR := $(SRCDIR)data 
CUBINS += $(patsubst %.cu,$(CUBINDIR)/%.cubin,$(notdir $(CUBINFILES))) 

################################################################################ 
# Set up PTX output files 
################################################################################ 
PTXDIR := $(SRCDIR)data 
PTXBINS += $(patsubst %.cu,$(PTXDIR)/%.ptx,$(notdir $(PTXFILES))) 

################################################################################ 
# Rules 
################################################################################ 
$(OBJDIR)/%.c.o : $(SRCDIR)%.c $(C_DEPS) 
     $(VERBOSE)$(CC) $(CFLAGS) -o [email protected] -c $< 

$(OBJDIR)/%.cpp.o : $(SRCDIR)%.cpp $(C_DEPS) 
     $(VERBOSE)$(CXX) $(CXXFLAGS) -o [email protected] -c $< 

# Default arch includes gencode for sm_10, sm_20, sm_30, and other archs from GENCODE_ARCH declared in the makefile 
$(OBJDIR)/%.cu.o : $(SRCDIR)%.cu $(CU_DEPS) 
     $(VERBOSE)$(NVCC) $(GENCODE_SM10) $(GENCODE_ARCH) $(GENCODE_SM20) $(GENCODE_SM30) $(NVCCFLAGS) $(SMVERSIONFLAGS) -o [email protected] -c $< 

# Default arch includes gencode for sm_10, sm_20, sm_30, and other archs from GENCODE_ARCH declared in the makefile 
$(CUBINDIR)/%.cubin : $(SRCDIR)%.cu cubindirectory 
     $(VERBOSE)$(NVCC) $(GENCODE_SM10) $(GENCODE_ARCH) $(GENCODE_SM20) $(GENCODE_SM30) $(CUBIN_ARCH_FLAG) $(NVCCFLAGS) $(SMVERSIONFLAGS) -o [email protected] -cubin $< 

$(PTXDIR)/%.ptx : $(SRCDIR)%.cu ptxdirectory 
     $(VERBOSE)$(NVCC) $(CUBIN_ARCH_FLAG) $(NVCCFLAGS) $(SMVERSIONFLAGS) -o [email protected] -ptx $< 
# The following definition is a template that gets instantiated for each SM 
# version (sm_10, sm_13, etc.) stored in SMVERSIONS. It does 2 things: 
# 1. It adds to OBJS a .cu_sm_XX.o for each .cu file it finds in CUFILES_sm_XX. 
# 2. It generates a rule for building .cu_sm_XX.o files from the corresponding 
# .cu file. 
# 
# The intended use for this is to allow Makefiles that use common.mk to compile 
# files to different Compute Capability targets (aka SM arch version). To do 
# so, in the Makefile, list files for each SM arch separately, like so: 
# This will be used over the default rule abov 
# 
# CUFILES_sm_10 := mycudakernel_sm10.cu app.cu 
# CUFILES_sm_12 := anothercudakernel_sm12.cu 
# 
define SMVERSION_template 
#OBJS += $(patsubst %.cu,$(OBJDIR)/%.cu_$(1).o,$(notdir $(CUFILES_$(1)))) 
OBJS += $(patsubst %.cu,$(OBJDIR)/%.cu_$(1).o,$(notdir $(CUFILES_sm_$(1)))) 
$(OBJDIR)/%.cu_$(1).o : $(SRCDIR)%.cu $(CU_DEPS) 
#  $(VERBOSE)$(NVCC) -o [email protected] -c $$< $(NVCCFLAGS) $(1) 
     $(VERBOSE)$(NVCC) -gencode=arch=compute_$(1),code=\"sm_$(1),compute_$(1)\" $(GENCODE_SM20) $(GENCODE_SM30) -o [email protected] -c $$< $(NVCCFLAGS) 
endef 

# This line invokes the above template for each arch version stored in 
# SM_VERSIONS. The call function invokes the template, and the eval 
# function interprets it as make commands. 
$(foreach smver,$(SM_VERSIONS),$(eval $(call SMVERSION_template,$(smver)))) 

$(TARGET): makedirectories $(OBJS) $(CUBINS) $(PTXBINS) Makefile 
     $(VERBOSE)$(LINKLINE) 

cubindirectory: 
     $(VERBOSE)mkdir -p $(CUBINDIR) 

ptxdirectory: 
     $(VERBOSE)mkdir -p $(PTXDIR) 

makedirectories: 
     $(VERBOSE)mkdir -p $(LIBDIR) 
     $(VERBOSE)mkdir -p $(OBJDIR) 
     $(VERBOSE)mkdir -p $(TARGETDIR) 


tidy : 
     $(VERBOSE)find . | egrep "#" | xargs rm -f 
     $(VERBOSE)find . | egrep "\~" | xargs rm -f 
clean : tidy 
     $(VERBOSE)rm -f *.stub.c *.gpu *.cu.cpp *.i *.ii 
     $(VERBOSE)rm -f *.cubin *.ptx *.fatbin.c *.hash 
     $(VERBOSE)rm -f *.cudafe1.c *.cudafe2.c *.cudafe1.cpp *.cudafe2.cpp 
     $(VERBOSE)rm -f $(OBJS) 
     $(VERBOSE)rm -f $(CUBINS) 
     $(VERBOSE)rm -f $(PTXBINS) 
     $(VERBOSE)rm -f $(TARGET) 
     $(VERBOSE)rm -f $(NVCC_KEEP_CLEAN) 
     $(VERBOSE)rm -f $(ROOTBINDIR)/$(OSLOWER)/$(BINSUBDIR)/*.ppm 
     $(VERBOSE)rm -f $(ROOTBINDIR)/$(OSLOWER)/$(BINSUBDIR)/*.pgm 
     $(VERBOSE)rm -f $(ROOTBINDIR)/$(OSLOWER)/$(BINSUBDIR)/*.bin 
     $(VERBOSE)rm -f $(ROOTBINDIR)/$(OSLOWER)/$(BINSUBDIR)/*.bmp 
     $(VERBOSE)rm -f $(ROOTBINDIR)/$(OSLOWER)/$(BINSUBDIR)/*.txt 
     $(VERBOSE)rm -f $(CUBINDIR)/*.cubin $(PTXDIR)/*.ptx 
     $(VERBOSE)rm -rf $(ROOTOBJDIR) 
     $(VERBOSE)rm -rf $(LIBDIR) 
     $(VERBOSE)rm -rf $(OBJDIR) 
     $(VERBOSE)rm -rf $(TARGETDIR) 

clobber : clean 
     $(VERBOSE)rm -rf $(COMMONDIR)/lib/*.a 
     $(VERBOSE)rm -rf $(SHAREDDIR)/lib/*.a 
     $(VERBOSE)rm -rf $(COMMONDIR)/obj 
     $(VERBOSE)rm -rf $(SHAREDDIR)/obj 

回答

1

Why is this happening?

libcutil_x86_64.liblibshrutil_x86_64.lib是由CUDA樣品建(稱爲CUDA SDK在CUDA 4.2和更早版本)時,安裝CUDA SDK後適當make作業完成後庫。鏈接器找不到這些庫,所以拋出這些錯誤。

How can I remedy it?

  1. 確保CUDA 4.2 SDK已正確安裝,並提供必要make操作已經完成,建立樣本,因此必要的庫。如果您不確定如何安裝CUDA SDK或製作示例代碼,請查看/home/ian/code/cuda-4.2.9/CUDA_SDK_Release_Notes.txt文件(尤其是Linux安裝說明)。您可能還對該目錄中的GPU_COMPUTING_SDK_Description.rtf文件以及.../doc/release子目錄中的文件感興趣。如果您沒有正確構建樣本,圖書館將無法使用,並且您將無法鏈接您自己的matrixMul-MARS項目。請注意,您可以指定安裝CUDA SDK的目錄路徑。我們假設從這裏開始,路徑中的...代表您的SDK安裝路徑(可能是/home/ian/code/cuda-4.2.9/NVIDIA_GPU_Computing_SDK或類似的東西)。如果事情混亂了,您可能想要開始清理並重新運行安裝程序。
  2. 爲您的matrixMul-MARS項目創建一個新的項目目錄,與其他C源項目目錄相同,即.../C/src/myMARS或類似的目錄。
  3. .../C/src/matrixMul目錄中的所有文件複製到新的.../C/src/myMARS目錄中。
  4. 根據您在此處顯示的內容對新項目目錄中的Makefile進行必要的更改(例如包括要構建的其他文件等)。您不必對common.mk進行任何更改。
  5. 現在在您的新項目目錄中執行make
+0

現在一切都很精彩,謝謝你的詳細說明。 – user1743798

相關問題