CUDA编译专有符号不识别及与CPP混编

1 篇文章 0 订阅
  • <<<是cuda中专有符号,属于cuda的语法范畴,不能用g++编译器编译。需要用nvcc编译
  • 如果需要同时编译.cu和.cpp,需要解决两者混编问题。
  1. 首先在 .cu 文件中,需要在函数实现前都加上 extern “C”。
extern "C" void fun()
{
// your implement
}
  1. 在.cpp文件中,函数调用前需要声明,声明需要加 extern “C”
extern "C" void fun();
  1. 编写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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值