Как скомпилировать код OpenCV с помощью разделяемой библиотеки Cuda, скомпилированной с помощью nvcc? - PullRequest
1 голос
/ 28 июля 2011

Для теста я написал код умножения матриц на C (cuda) и скомпилировал его с помощью nvcc для создания разделяемой библиотеки с помощью следующей команды.

nvcc -c MatMul.cu -o libmatmul.so

Затем я написал код OpenCV на C и попытался скомпилировать следующую команду.

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'

Может кто-нибудь сказать мне, как включить библиотеки cuda при компиляции кода в gcc.

ОС: Ubuntu gcc: 4.4.0

1 Ответ

1 голос
/ 28 июля 2011

Первое, что нужно сделать, это то, что

nvcc -c MatMul.cu -o libmatmul.so

не создает разделяемую библиотеку, он просто компилируется в объектный файл. Общие библиотеки и объектные файлы - это совсем не одно и то же.

Кроме того, причина ошибки символа не найдена: C ++ искажение имени . Код хоста в исходных файлах CUDA компилируется с использованием компилятора хоста C ++, а не C. Поэтому имена символов в коде хоста, генерируемые компилятором, подвергаются искажению имен. Чтобы обойти это, самый простой способ - объявить функции, которые вы хотите вызывать из простого кода C, используя декларатор extern "C" (см. здесь для разумного обзора опасностей совместимости C / C ++).

...