我正在尝试为我的 x86_64 Centos 6 操作系统构建 opencv。
我认为问题是 make 试图使用 32 位版本的 bz2 库而不是 64 位版本。
我从 make 得到这个错误:
[ 17%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_decoder.cpp.o
[ 17%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dc1394_v2.cpp.o
[ 17%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_gstreamer.cpp.o
[ 19%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_v4l.cpp.o
[ 19%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o
Linking CXX shared library ../../lib/libopencv_videoio.so
/lib/libbz2.so.1: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[2]: *** [lib/libopencv_videoio.so.3.1.0] Error 1
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2
make: *** [all] Error 2
我像这样运行 cmake:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_LIBRARY_PATH=/usr/lib64 CMAKE_INSTALL_PREFIX=/usr/local ..
我已经安装了库:
[root@localhost build]# ldconfig -p | grep libbz2
libbz2.so.1 (libc6,x86-64) => /lib64/libbz2.so.1
libbz2.so.1 (libc6) => /lib/libbz2.so.1
我可以做什么来解决这个问题?谢谢!
编辑:我还有目录 /lib 和 /lib64,在 /lib64 中我有 libbz2.so.1 和 libbz2.so.1.0.4
编辑:我正在遵循这些说明 http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html
答案1
在浏览了其他几个问答网站后,我发现问题是 cmake 使用 32 位库就像使用 64 位库一样。
我在 Fedora 22 上通过这样做解决了这个问题:
删除你的
CMakeCache.txt
文件运行
cmake
以重新生成它cmake -D blah blah flags and values
编辑您的
CMakeCache.txt
文件并更改此行//Path to a library. BZIP2_LIBRARIES:FILEPATH=/lib/libbz2.so.1
对此
//Path to a library. BZIP2_LIBRARIES:FILEPATH=/lib64/libbz2.so.1
再次运行
cmake
(不确定是否需要但以防万一)make
然后就完成了,没有错误