opencv4tegra: проблемы с компиляцией примера stereo_match.cpp
Я испытываю значительные трудности при компиляции стандартного образца opencv с opencv4tegra - установленной в соответствии с инструкциями вики nvidia для Jetson TK1.
Из-за разочарования я собрал opencv из источника 2.4.10.1 и установил его прямо в / usr / local... и он отлично работал! После того, как я удалил его, у меня возникла та же проблема, которая компилировалась с их, так что, очевидно, это то, что я делаю. Забавно то, что я могу запустить скомпилированный пример приложения на их opencv4tegra lib... но я не могу скомпилировать на их lib.
Тестовая среда:
Я не изменил пример файла из версии 2.4.10.1 opencv - это тот же файл stereo_match.cpp. Я просто пытаюсь это скомпилировать.
Функции находятся внутри файла gpu.hpp - я уже посмотрел. Я также бежал:
nm /usr/lib/libopencv_gpu.so | grep StereoBM_GPU | c++filt
... просто чтобы убедиться, что символы в библиотеке.
Что здесь происходит?? Итак, это явно не ссылки - но я не могу понять, что хочет g++...
$: ~ / OpenCV / образцы / $ GPU
g++ -I/usr/include -L/usr/local/cuda/lib `pkg-config opencv --libs` stereo_match.cpp -o stereo_m
/tmp/ccvj1IgD.o: в функции
App::App(Params const&)': stereo_match.cpp:(.text+0x8b0): undefined reference to
cv:: gpu::StereoBM_GPU::StereoBM_GPU ()' stereo_match.cpp:(.text+0x8c6): неопределенная ссылка наcv::gpu::StereoBeliefPropagation::StereoBeliefPropagation(int, int, int, int)' stereo_match.cpp:(.text+0x8e0): undefined reference to
cv::gpu::StereoConstantSpaceBP::StereoConstantSpaceBP(int, int, int, int, int)' stereo_match.cpp:(.text+0x8e4): неопределенная ссылка наcv::gpu::getDevice()' stereo_match.cpp:(.text+0x8ec): undefined reference to
cv::gpu::printShortCudaDeviceInfo(int)' /tmp/ccvj1IgD.o: в функцииApp::run()': stereo_match.cpp:(.text+0xa42): undefined reference to
cv::imread(std::string const&, int)' stereo_match.cpp:(.text+0xa70): неопределенная ссылка наcv::imread(std::string const&, int)' stereo_match.cpp:(.text+0xb90): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xba0): неопределенная ссылка наcv::_OutputArray::_OutputArray(cv::Mat&)' stereo_match.cpp:(.text+0xbb4): undefined reference to
cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' stereo_match.cpp:(.text+0xbc4): неопределенная ссылка наcv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xbd4): undefined reference to
cv::_OutputArray::_OutputArray(cv::Mat&)' stereo_match.cpp:(.text+0xbe8): неопределенная ссылка наcv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' stereo_match.cpp:(.text+0xbfa): undefined reference to
cv::gpu::GpuMat::upload(cv::Mat const&)' stereo_match.cpp:(.text+0xc0c): неопределенная ссылка наcv::gpu::GpuMat::upload(cv::Mat const&)' stereo_match.cpp:(.text+0xc3e): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xc4e): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' stereo_match.cpp:(.text+0xc94): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xca4): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' stereo_match.cpp:(.text+0xdaa): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xdba): неопределенная ссылка наcv::_OutputArray::_OutputArray(cv::Mat&)' stereo_match.cpp:(.text+0xdce): undefined reference to
cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' stereo_match.cpp:(.text+0xdde): неопределенная ссылка наcv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xdee): undefined reference to
cv::_OutputArray::_OutputArray(cv::Mat&)' stereo_match.cpp:(.text+0xe02): неопределенная ссылка наcv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' stereo_match.cpp:(.text+0xe4e): undefined reference to
cv::gpu::GpuMat::upload(cv::Mat const&)' stereo_match.cpp:(.text+0xe60): неопределенная ссылка наcv::gpu::GpuMat::upload(cv::Mat const&)' stereo_match.cpp:(.text+0xe92): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xea2): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' stereo_match.cpp:(.text+0xee8): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0xef8): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' stereo_match.cpp:(.text+0xf22): undefined reference to
cv::gpu::Stream::Null()' stereo_match.cpp:(.text+0xf34): неопределенная ссылка наcv::gpu::StereoBM_GPU::operator()(cv::gpu::GpuMat const&, cv::gpu::GpuMat const&, cv::gpu::GpuMat&, cv::gpu::Stream&)' stereo_match.cpp:(.text+0xf4c): undefined reference to
cv::gpu::Stream::Null()' stereo_match.cpp:(.text+0xf5e): неопределенная ссылка наcv::gpu::StereoBeliefPropagation::operator()(cv::gpu::GpuMat const&, cv::gpu::GpuMat const&, cv::gpu::GpuMat&, cv::gpu::Stream&)' stereo_match.cpp:(.text+0xf76): undefined reference to
cv::gpu::Stream::Null()' stereo_match.cpp:(.text+0xf88): неопределенная ссылка наcv::gpu::StereoConstantSpaceBP::operator()(cv::gpu::GpuMat const&, cv::gpu::GpuMat const&, cv::gpu::GpuMat&, cv::gpu::Stream&)' stereo_match.cpp:(.text+0xfa0): undefined reference to
cv::gpu::GpuMat::download(cv::Mat&) const' stereo_match.cpp:(.text+0xff6): неопределенная ссылка наcv::putText(cv::Mat&, std::string const&, cv::Point_<int>, int, double, cv::Scalar_<double>, int, int, bool)' stereo_match.cpp:(.text+0x1032): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0x1042): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' stereo_match.cpp:(.text+0x105c): undefined reference to
cv::waitKey(int)' /tmp/ccvj1IgD.o: в функцииApp::handleKey(char)': stereo_match.cpp:(.text+0x1630): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0x1640): неопределенная ссылка наcv::_OutputArray::_OutputArray(cv::Mat&)' stereo_match.cpp:(.text+0x1654): undefined reference to
cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' stereo_match.cpp:(.text+0x1664): неопределенная ссылка наcv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0x1674): undefined reference to
cv::_OutputArray::_OutputArray(cv::Mat&)' stereo_match.cpp:(.text+0x1688): неопределенная ссылка наcv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' stereo_match.cpp:(.text+0x169a): undefined reference to
cv::gpu::GpuMat::upload(cv::Mat const&)' stereo_match.cpp:(.text+0x16ac): неопределенная ссылка наcv::gpu::GpuMat::upload(cv::Mat const&)' stereo_match.cpp:(.text+0x1718): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0x1728): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' stereo_match.cpp:(.text+0x176e): undefined reference to
cv::_InputArray::_InputArray(cv::Mat const&)' stereo_match.cpp:(.text+0x177e): неопределенная ссылка наcv::imshow(std::string const&, cv::_InputArray const&)' /tmp/ccvj1IgD.o: In function
cv::Mat::~Mat()': stereo_match.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x20): неопределенная ссылка наcv::fastFree(void*)' /tmp/ccvj1IgD.o: In function
cv:: Mat:: operator = (cv:: Mat const &) ': stereo_match.cpp:(. text. ZN2cv3MataSERKS0 [ ZN2cv3MataSERKS0 ] + 0xa2): неопределенная ссылка наcv::Mat::copySize(cv::Mat const&)' /tmp/ccvj1IgD.o: In function
cv::Mat::create(int, int, int)': stereo_match.cpp:(.text._ZN2cv3Mat6createEiii[_ZN2cv3Mat6createEiii]+0x66): неопределенная ссылка наcv::Mat::create(int, int const*, int)' /tmp/ccvj1IgD.o: In function
cv:: Mat:: release () ': stereo_match.cpp:(. text._ZN2cv3Mat7releaseEv [ ZN2cv3Mat7releaseEv] + 0x30): неопределенная ссылка наcv::Mat::deallocate()' /tmp/ccvj1IgD.o: In function
cv:: gpu:: GpuMat:: GpuMat (cv:: Size, int) ': stereo_match.cpp:(. text._ZN2cv3gpu6GpuMatC2ENS_5Size_IiEEi [_ZN2cv3gpu6GpuMatC5ENS_5S] undefined: 0i = 0cv::gpu::GpuMat::create(int, int, int)' /tmp/ccvj1IgD.o: In function
cv::gpu::GpuMat::~GpuMat()': stereo_match.cpp:(.text._ZN2cv3gpu6GpuMatD2Ev[_ZN2cv3gpu6GpuMatD5Ev]+0xa): неопределенная ссылка наcv::gpu::GpuMat::release()' /tmp/ccvj1IgD.o: In function
App::workBegin()': stereo_match.cpp:(. Text._ZN3App9workBeginEv[_ZN3App9workBeginEv]+0x8): неопределенная ссылка наcv::getTickCount()' /tmp/ccvj1IgD.o: In function
App::workEnd()': stereo_match.cpp:(. Text._ZN3App7workEndEv[_ZN3App7workEndEv]+0x8): неопределенная ссылка наcv::getTickCount()' stereo_match.cpp:(.text._ZN3App7workEndEv[_ZN3App7workEndEv]+0x20): undefined reference to
cv::getTickFrequency()' collect2: error: ld вернул 1 состояние выхода
1 ответ
Смотрите макросы в инструкциях по cmake для упаковки в opencv и придерживайтесь make. Еще раз спасибо за подсказку "Iwillnotexist Idonotexist".
В моем случае я пропустил две зависимости: /modules/gpu/src/nvidia && /modules/gpu/src/nvidia/core ... и в других частях были ссылки на "несвободные".
Скрытая зависимость... о, парень.
Спасибо за все ответы - кажется тривиальным сейчас.