我希望将libcudart.so链接到我的cuda代码,以便可以获得对这些函数的引用。当我在.so文件或.o文件上触发readelf时,它会显示多个UND (未定义)条目。请帮帮忙。
nvcc -c cuda/spmv/dispatch-float-float.cu -o cuda/spmv/dispatch-float-float.o -O2 -v -I. -gencode arch=compute_30,code=sm_30 -DCUDA_ARCH=30 --ptxas-options -v --cudafe-options --diag_suppress=code_is_unreachable --compiler-options -fPIC --compiler-options -fpermissive这是我的编译代码。它不链接libcudart.so文件中的CUDA函数,而CUDA函数仍未定义。
这是我的制作文件,请建议修改。
NVCC = nvcc
CUDA_PATH = $(shell which $(NVCC) | sed s@/bin/nvcc@@)
CUDA_ARCH = 35
CUDA_INCLUDE := -I$(CUDA_PATH)/include/
CXXWARN := -Wall -Wno-sign-compare
CXXOPT := -O2
CXXFLAGS := $(CXXOPT) -g $(CXXWARN) -fPIC -I. $(CUDA_INCLUDE)
NVCCFLAGS := -O2 -v -I. -gencode arch=compute_$(CUDA_ARCH),code=sm_$(CUDA_ARCH) \
-DCUDA_ARCH=$(CUDA_ARCH) \
--ptxas-options -v \
--cudafe-options --diag_suppress=code_is_unreachable \
--compiler-options -fPIC
LIB = libispm0-pic.a
all: $(LIB)
SPMV_OBJS = cuda/spmv/dispatch-float-float.o cuda/spmv/dispatch-double-float.o cuda/spmv/dispatch-double-double.o
EXTRA_OBJS = util/cuda/sblas.o fastainv/fastainv.o util/cuda/initialize.o
OBJS = $(SPMV_OBJS) $(EXTRA_OBJS)
$(LIB): $(OBJS)
ar cr $@ $^
cuda/spmv/dispatch-%.o: cuda/spmv/dispatch-%.cu
$(NVCC) -c $< -o $@ $(NVCCFLAGS) --compiler-options -fpermissive
objcopy --localize-hidden $@
util/cuda/%.o: util/cuda/%.cu
$(NVCC) -c $< -o $@ $(NVCCFLAGS)
fastainv/fastainv.o: fastainv/fastainv.cpp
$(CXX) -c $< -o $@ $(CXXFLAGS)
clean:
-rm $(OBJS) $(LIB)发布于 2016-02-24 13:48:24
因此,您的意思是,您希望静态地链接到-lcudart,以便这些引用总是由OS加载器解析。
在最近的CUDA工具包中,nvcc接受这些标志
--cudart{无共享的none} (-cudart) 共享/动态CUDA运行时库或静态CUDA运行时库。允许此选项的值:“无”、“共享”、“静态”。
所以也许你可以试着在你的制作规则中添加--卡达特静电。
https://stackoverflow.com/questions/35597121
复制相似问题