Я использовал следующий Makefile для создания файла my_kernel.so. Kernel.cuh содержит только объявление функции:
void call_kernel(float *flattened_arr, float *out_arr_2, const int x_size, const int y_size, const int kernal_width);
Однако при вызове функции call_kernel из другой программы произошла ошибка неопределенной функции call_kernel.
Мой вопрос: правильные ли строки генерируют файлы .o и .so?
$(OUT): $(OBJ)
$(CC) $(LDFLAGS) -shared $(LIBRARIES) -fpic -o $@
$(ODIR)/%.o: $(SDIR)/%.cu $(DEPS)
$(NVCC) $(NVCC_FLAGS) $(INCLUDES) -c $< -o $@
Вот весь Makefile:
CC=g++-8
DEBUG=no
ifeq ($(DEBUG),yes)
CXXFLAGS=-Wall -g
LDFLAGS=-Wall -g
else
CXXFLAGS=-Wall -g
LDFLAGS=-Wall -g
endif
NVCC=nvcc
NVCC_FLAGS=
NVCC_LIBS=
INCPATH=inc
SRCPATH=src
OBJPATH=obj
LIBPATH=lib
# CUDA directory:
CUDA_INC = /usr/include
CUDA_LIB = /usr/lib/x86_64-linux-gnu
DIR=/home/lee/Downloads/my_project
IDIR=$(DIR)/inc
_DEPS = kernel.cuh
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
SDIR=$(DIR)/src
_SRC = kernel.cu
SRC = $(patsubst %,$(SDIR)/%,$(_SRC))
ODIR=$(DIR)/obj
_OBJ = kernel.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
OUT=$(DIR)/lib/libmy_kernel.so
INCLUDES=-I$(CUDA_INC) -I$(IDIR)
LIBRARIES=-L$(CUDA_LIB) -lcudart_static -L$(CUDA_LIB) -lcudadevrt
default: $(OUT)
$(OUT): $(OBJ)
$(CC) $(LDFLAGS) -shared $(LIBRARIES) -fpic -o $@
$(ODIR)/%.o: $(SDIR)/%.cu $(DEPS)
$(NVCC) $(NVCC_FLAGS) $(INCLUDES) -c $< -o $@
.PHONY: clean cleanall
clean:
rm -f $(ODIR)/*.o
cleanall: clean
rm -f $(OUT)
Большое спасибо