- <<<是cuda中专有符号,属于cuda的语法范畴,不能用g++编译器编译。需要用nvcc编译
- 如果需要同时编译.cu和.cpp,需要解决两者混编问题。
- 首先在 .cu 文件中,需要在函数实现前都加上 extern “C”。
extern "C" void fun()
{
// your implement
}
- 在.cpp文件中,函数调用前需要声明,声明需要加 extern “C”
extern "C" void fun();
- 编写makefile
例如我的makefile文件
CUDA_VER:=10.1
CC:= g++
CFLAGS:= -Wall -std=c++11
CFLAGS+= -shared -fPIC
CFLAGS+= -I../../includes -I /usr/local/TensorRT-6.0.1.5/include \
-I /usr/local/cuda-10.1/include
LIBS:= -L/usr/local/cuda-$(CUDA_VER)/lib64/ -lcuda -lcudart \
-lnvinfer -lnvparsers
LFLAGS:= -Wl,--start-group $(LIBS) -Wl,--end-group
CU_SRCS := $(wildcard *.cu)
C_SRCS := $(wildcard *.cpp)
# SRCFILES:= nvdsinfer_custombboxparser.cpp nvdsinfer_customclassifierparser.cpp
CU_OBJS := $(CU_SRCS:.cu=.o)
C_OBJS += $(C_SRCS:.cpp=.o)
TARGET_LIB:= libnvds_infercustomparser.so
all: $(TARGET_LIB)
$(CU_OBJS) : $(CU_SRCS)
nvcc -c $^
$(C_OBJS) : $(C_SRCS)
$(CC) -c $^
$(TARGET_LIB) : $(SRCFILES)
$(CC) -o $@ $^ $(CFLAGS) $(LFLAGS)
clean:
rm -rf $(TARGET_LIB)