Компиляция базовой программы OpenCV + Cuda на Linux - PullRequest
2 голосов
/ 27 июля 2011

В прошлом я работал с opencv на linux, но не с cuda. Я боролся со следующей ошибкой компиляции в течение нескольких месяцев. И после попытки многих решений я сдался и работал с окнами. Тем не менее, я действительно хочу работать на Linux. Это команда, которую я использую для компиляции порогового примера, приведенного на сайте opencv_gpu

nvcc `pkg-config --libs opencv` -L. -L/usr/local/cuda/lib -lcuda -lcudart `pkg-config --cflags opencv` -I. -I/usr/local/cuda/include threshold.cpp -o threshold

вот ошибка:

/tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `main':
threshold.cpp:(.text+0x124): undefined reference to `cv::gpu::Stream::Null()'
threshold.cpp:(.text+0x156): undefined reference to `cv::gpu::threshold(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, int, cv::gpu::Stream&)'
threshold.cpp:(.text+0x16d): undefined reference to `cv::gpu::GpuMat::download(cv::Mat&) const'
/tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `cv::gpu::GpuMat::GpuMat(cv::Mat const&)':
threshold.cpp:(.text._ZN2cv3gpu6GpuMatC1ERKNS_3MatE[cv::gpu::GpuMat::GpuMat(cv::Mat const&)]+0x63): undefined reference to `cv::gpu::GpuMat::upload(cv::Mat const&)'
/tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `cv::gpu::GpuMat::~GpuMat()':
threshold.cpp:(.text._ZN2cv3gpu6GpuMatD1Ev[cv::gpu::GpuMat::~GpuMat()]+0xd): undefined reference to `cv::gpu::GpuMat::release()'                                        
collect2: ld returned 1 exit status                                                                                                                                     
make: *** [all] Error 1   

Ответы [ 3 ]

9 голосов
/ 28 июля 2011

Чтобы помочь вам, мне пришлось загрузить и установить CUDA 4.0 (с драйвером 4.0.21), а затем загрузить и скомпилировать OpenCV 2.3 для моего Macbook Pro на Mac OS X 10.6.8 .

Пример кода из OpenCV_GPU был успешно скомпилирован на моей машине с помощью:

g++ threshold.cpp -o threshold `pkg-config --cflags --libs opencv` -lopencv_gpu

Вы пропустили флаг-lopencv_gpu, который не включен в pkg-config .

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

Вместо использования pkg-config в строке nvcc, я бы предложил просто вручную указать компилятору библиотеку opencv и включить файлы.Возможно, вы можете просто запустить pkg-config --libs opencv в командной строке и скопировать необходимые библиотеки в вашу команду nvcc.Кажется, nvcc задыхается только от библиотек opencv (они точно не могут их найти!).

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

Это похоже на проблему компоновщика.Я не знаю, если nvcc следует тем же соглашениям, что и gcc, но я бы попробовал:

nvcc `pkg-config --cflags opencv` -L.-L / usr / local / cuda / lib -I.-I / usr / local / cuda / include -o threshold threshold.cpp `pkg-config --libs opencv` -lcuda -lcudart

В общем: если вы напишите

gcc t.cpp -lB -lA

это означает, что libB зависит от символов из libA;t.cpp может зависеть от символов libA и libB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...