为了测试,我用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++互操作性的风险)。