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

时间:2011-07-28 09:27:13

标签: gcc opencv cuda nvcc

对于测试,我在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库。

操作系统:Ubuntu gcc:4.4.0

1 个答案:

答案 0 :(得分:1)

要做的第一点是

nvcc -c MatMul.cu -o libmatmul.so

不会创建共享库,它只是编译为目标文件。共享库和目标文件完全不同。

除此之外,找不到符号错误的原因是C ++ name mangling。 CUDA源文件中的主机代码是使用主机C ++编译器编译的,而不是C.因此编译器发出的主机代码中的符号名称受名称修改。为了解决这个问题,最简单的方法是使用extern "C"声明符声明您希望从普通C代码调用的函数(有关C / C ++互操作性危险的合理概述,请参阅here)。