簡體   English   中英

如何使用使用nvcc編譯的Cuda共享庫編譯OpenCV代碼?

[英]How to compile OpenCV code using a Cuda shared library compiled using 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

首先要說明的是

nvcc -c MatMul.cu -o libmatmul.so

不創建共享庫,它只是編譯為目標文件。 共享庫和目標文件根本不是一回事。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM