2011-07-28 159 views
1

對於我在C(cuda)中編寫矩陣乘法代碼的測試,並使用nvcc編譯它以使用以下命令創建共享庫。如何使用nvcc編譯的Cuda共享庫來編譯OpenCV代碼?

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

第一點要提出的是

nvcc -c MatMul.cu -o libmatmul.so 

不會使共享庫,它只是編譯成目標文件。共享庫和對象文件並不完全相同。

除此之外,符號未找到錯誤的原因是C++ name mangling。 CUDA源文件中的主機代碼是使用主機C++編譯器編譯的,而不是C編譯器。因此,編譯器發出的主機代碼中的符號名稱受名稱修改的影響。爲了解決這個問題,最簡單的方法是使用extern "C"聲明程序聲明您希望從普通C代碼調用的函數(有關C/C++互操作性風險的合理概述,請參見here)。

+0

感謝它的工作.... –