我将一个项目分为三个文件夹:src、include、obj
我正在使用 CImg.h 和 cuda.h 库。
我声明void convolve(cimg_library::CImg<float>&, cimg_library::CImg<float> const &);
在 convolve.h 中
并在 convolve.cu 中定义它
我的文件 :
主要.cpp:
#include "CImg.h"
#include "../include/convolve.h"
using namespace cimg_library;
int main(){
CImg<float> var1("/*path*/");
CImg<float> var2("/*path2*/");
convolve(var1,var2);
//some code
}
卷积.h:
1 #ifndef CONVOLVE_H
2 #define CONVOLVE_H
//some define
10 void convolve(cimg_library::CImg<float>&, cimg_library::CImg<float> const &);
11 #endif //CONVOLVE_H
卷积.cu:
1 void convolve(CImg<float>& img, const CImg<float>& kernel){
//some code
24 kernel<<<dimGrid,dimBlocks>>>(/*some arg*/);
}
和我的新 makefile :
1 CC=nvcc
2 CX=g++
3 IDIR =../include
4 special_IDIR = /usr/local/cuda-9.0/include
5 LDIR = /usr/local/cuda-9.0/lib64
6 CFLAGS=-I$(special_IDIR) -L$(LDIR)
7
8 LIBS = -lX11 -lpthread -lcudart
9 ODIR = ../obj
10
11
12 _DEPS = convolve.h kernel.cuh
13 DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
14
15 _OBJ = main.o convolve.o kernel.o
16 OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
17
18 $(ODIR)/%.o: %.cpp $(DEPS)
19 $(CX) -x c++ -o $@ $< $(CFLAGS) $(LIBS)
20
21 $(ODIR)/%.o: %.cu $(DEPS)
22 $(CC) -cu -o $@ $< $(CFLAGS)
23
24 all: $(OBJ)
25 $(CC) -o $@ $^ $(CFLAGS)
26
27
28 .PHONY: clean
29
30 clean:
31 rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
这是我的问题:它提到了void convolve(cimg_library::CImg<float>&, cimg_library::CImg<float> const &)
未定义。
我想这是因为我从来没有明确的告诉编译器convolve的定义在convolve.cu中。但我不知道如何正确建立此链接。
感谢您的帮助 !