1

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

4

1 回答 1

1

首先要说明的是

nvcc -c MatMul.cu -o libmatmul.so

不创建共享库,它只是编译为目标文件。共享库和目标文件根本不是一回事。

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

于 2011-07-28T10:04:01.250 回答