如何使用使用nvcc编译的Cuda共享库编译OpenCV代码



为了测试,我用C(cuda)编写了一个矩阵乘法代码,并使用nvcc编译它,使用以下命令创建共享库。

nvcc -c MatMul.cu -o libmatmul.so

然后我用C写了一个OpenCV代码,并尝试用下面的命令编译。

gcc ImgMul.c `pkg-config --cflags --libs opencv` -L. -L/usr/local/cuda/lib64 -I/usr/local/cuda/include -I. -lmatmul -lcudart -o ImgMul

和我得到以下错误。

gputest.c:(.text+0x3f): undefined reference to `matmul'

谁能告诉我如何在gcc中编译代码时包含cuda库。

操作系统:UbuntuGCC: 4.4.0

首先要说明的是

nvcc -c MatMul.cu -o libmatmul.so

不生成一个共享库,它只是编译成一个目标文件。共享库和目标文件完全不是一回事。

除了

之外,符号not found错误的原因是c++名称混淆。CUDA源文件中的主机代码是使用主机c++编译器编译的,而不是C。因此编译器发出的主机代码中的符号名称会受到名称混淆的影响。要解决这个问题,最简单的方法是使用extern "C"声明器声明您希望从普通C代码调用的函数(请参阅此处,了解C/c++互操作性的风险)。

相关内容

  • 没有找到相关文章

最新更新