调用opencv时编译报错,libilmlmf.so问题
[ 66%] Linking CXX executable testinit
/usr/bin/ld: warning: libIlmImf-2_2.so.22, needed by /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libHalf.so.12, needed by /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::globalThreadCount()'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::ChannelList::insert(char const*, Imf_2_2::Channel const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::InputFile::header() const'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::hasChromaticities(Imf_2_2::Header const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::OutputFile::writePixels(int)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::InputFile::setFrameBuffer(Imf_2_2::FrameBuffer const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::InputFile::readPixels(int, int)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Channel::Channel(Imf_2_2::PixelType, int, int, bool)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Slice::Slice(Imf_2_2::PixelType, char*, unsigned long, unsigned long, int, int, double, bool, bool)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::OutputFile::setFrameBuffer(Imf_2_2::FrameBuffer const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Header::dataWindow() const'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Header::channels()'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `half::_eLut'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Header::channels() const'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Header::~Header()'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Header::Header(int, int, float, Imath_2_2::Vec2<float> const&, float, Imf_2_2::LineOrder, Imf_2_2::Compression)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::InputFile::InputFile(char const*, int)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::OutputFile::OutputFile(char const*, Imf_2_2::Header const&, int)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::FrameBuffer::insert(char const*, Imf_2_2::Slice const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::ChannelList::findChannel(char const*) const'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::chromaticities(Imf_2_2::Header const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `half::convert(int)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::Chromaticities::Chromaticities(Imath_2_2::Vec2<float> const&, Imath_2_2::Vec2<float> const&, Imath_2_2::Vec2<float> const&, Imath_2_2::Vec2<float> const&)'
/usr/bin/ld: /home/tonglu/pkg/opencv3.2/opencv-3.2.0/install/lib/libopencv_imgcodecs.so.3.2.0: undefined reference to `Imf_2_2::OutputFile::~OutputFile()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/testinit.dir/build.make:129: testinit] Error 1
make[1]: *** [CMakeFiles/Makefile2:107: CMakeFiles/testinit.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
opencv undefined reference to `Imf_2_2::hasChromaticities(Imf_2_2::H
这两个库找不到,所以导致了undefined reference的问题
我查了一下:libilmlmf.so在系统路径下:
~$ locate libIlmImf
/home/tonglu/tergeo/tergeo/tools/mapper/lib/3rdparty/libIlmImf-2_2.so.22
/tergeo/tools/mapper/lib/3rdparty/libIlmImf-2_2.so.22
/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22
/usr/lib/x86_64-linux-gnu/libIlmImf-2_2.so.22.0.0
/usr/lib/x86_64-linux-gnu/libIlmImf.a
/usr/lib/x86_64-linux-gnu/libIlmImf.so
/usr/lib/x86_64-linux-gnu/libIlmImfUtil-2_2.so.22
/usr/lib/x86_64-linux-gnu/libIlmImfUtil-2_2.so.22.0.0
/usr/lib/x86_64-linux-gnu/libIlmImfUtil.a
/usr/lib/x86_64-linux-gnu/libIlmImfUtil.so
不应该存在找不到的问题
结果发现是编译opencv make之后,忘记了
sudo make install
由于我是在CMakeLists.txt中相对路径查找opencv3.2的库,所以g++可能就没有在系统路径下查找,所以出了错,吧opencv安到本机之后,就找到了所需的库,不再报错了。
一点点参考: https://blog.csdn.net/sz76211822/article/details/76129620
|