对于测试,我在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答案 0 :(得分:1)
要做的第一点是
nvcc -c MatMul.cu -o libmatmul.so
不会创建共享库,它只是编译为目标文件。共享库和目标文件完全不同。
除此之外,找不到符号错误的原因是C ++ name mangling。 CUDA源文件中的主机代码是使用主机C ++编译器编译的,而不是C.因此编译器发出的主机代码中的符号名称受名称修改。为了解决这个问题,最简单的方法是使用extern "C"
声明符声明您希望从普通C代码调用的函数(有关C / C ++互操作性危险的合理概述,请参阅here)。