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

Gcc 如何使用使用nvcc编译的Cuda共享库编译OpenCV代码?,gcc,opencv,cuda,nvcc,Gcc,Opencv,Cuda,Nvcc,为了进行测试,我用C(cuda)编写了一个矩阵乘法代码,并使用nvcc编译它,以使用以下命令创建共享库 nvcc -c MatMul.cu -o libmatmul.so gcc ImgMul.c `pkg-config --cflags --libs opencv` -L. -L/usr/local/cuda/lib64 -I/usr/local/cuda/include -I. -lmatmul -lcudart -o ImgMul 然后,我用C编写了一个OpenCV代码,并尝试使用以下

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

nvcc -c MatMul.cu -o libmatmul.so
gcc ImgMul.c `pkg-config --cflags --libs opencv` -L. -L/usr/local/cuda/lib64 -I/usr/local/cuda/include -I. -lmatmul -lcudart -o ImgMul
然后,我用C编写了一个OpenCV代码,并尝试使用以下命令进行编译

nvcc -c MatMul.cu -o libmatmul.so
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库

操作系统:Ubuntu
gcc:4.4.0

首先要指出的是

nvcc -c MatMul.cu -o libmatmul.so
不构成共享库,它只是编译成一个对象文件。共享库和对象文件根本不是一回事


这是符号没有发现错误的原因是C++。CUDA源文件中的主机代码是使用主机C++编译器编译的,而不是C。因此,编译器发出的主机代码中的符号名受名称限制。要解决这个问题,最简单的方法是使用

extern“C”
声明器声明您希望从普通C代码调用的函数(请参阅以获得C/C++互操作性危险的合理概述)。

首先要说明的是

nvcc -c MatMul.cu -o libmatmul.so
不构成共享库,它只是编译成一个对象文件。共享库和对象文件根本不是一回事

这是符号没有发现错误的原因是C++。CUDA源文件中的主机代码是使用主机C++编译器编译的,而不是C。因此,编译器发出的主机代码中的符号名受名称限制。为了避免这种情况,最简单的方法是使用

extern“C”
声明器声明您希望从普通C代码调用的函数(请参阅以获取C/C++互操作性危险的合理概述)