zoukankan      html  css  js  c++  java
  • CentOS7 安装 OpenCV 的一些问题解决办法

      由于强迫症,实在受不了root权限的旧gcc才能使用boost而普通权限却是最新版gcc,经过一番折腾后,终于把配置全部弄好了,实际上就只需要把新版gcc的各个文件放到系统找到旧gcc的地方,并建立新版的gcc、g++的软链接就可以覆盖系统旧版的了,然后再重新编译boost即可。

      弄好之后,我又开始折腾安装OpenCV了,可能由于最新版的gcc做了一些新改动,比如cstdlib头文件中使用了#include_next <stdlib.h>这样的方式包含了头文件stdlib.h,但OpenCV的库文件可不认识,make一会而就报错:

    /usr/include/c++/8.1.0/cstdlib:75:25:致命错误: stdlib.h: No such file or directory
      #include_next <stdlib.h>
    

      参考网上,将对应错误的文件中的#include_next修改#include就可以了。

      。。。

      但进行到92%的时候又出错了,是一个python文件的assert错:

    [ 92%] Generate files for Java bindings
    Traceback (most recent call last):
      File "/home/darkchii/下载/opencv-3.4.1/modules/java/generator/../generator/gen_java.py", line 1093, in <module>
        copy_java_files(java_files_dir, target_path)
      File "/home/darkchii/下载/opencv-3.4.1/modules/java/generator/../generator/gen_java.py", line 1032, in copy_java_files
        src = checkFileRemap(java_file)
      File "/home/darkchii/下载/opencv-3.4.1/modules/java/generator/../generator/gen_java.py", line 25, in checkFileRemap
        assert path[-3:] != '.in', path
    AssertionError: /home/darkchii/下载/opencv-3.4.1/modules/java/generator/src/java/org/opencv/osgi/OpenCVNativeLoader.java.in
    make[2]: *** [CMakeFiles/dephelper/gen_opencv_java_source] 错误 1
    make[1]: *** [modules/java_bindings_generator/CMakeFiles/gen_opencv_java_source.dir/all] 错误 2
    make: *** [all] 错误 2

      网上搜了一会儿也没发现相关的问题,都是关于java异常的错误。

      由于找不到解决办法,于是打算自己动手修改源文件的一些代码,发现可行,下面就是我的解决办法:

      将gen_java.py源文件中的25行:

    assert path[-3:] != '.in', path
    

      修改为:

    assert path[-4:] != '.in', path
    

      即可,然后重新make,又是这个文件的错误,这次是编码错误:

    [ 92%] Generate files for Java bindings
    JAVA: Processing OpenCV modules: 12
    duplicated: CLASS cv::.Algorithm : 
    SKIP:void read(FileNode fn)	 due to ARG typeFileNode/I
    SKIP:void write(Ptr_FileStorage fs, String name = String())	 due to ARG typePtr_FileStorage/I
    Traceback (most recent call last):
      File "/home/darkchii/下载/opencv-3.4.1/modules/java/generator/../generator/gen_java.py", line 1164, in <module>
        generator.gen(srcfiles, module, dstdir, jni_path, java_path, common_headers)
      File "/home/darkchii/下载/opencv-3.4.1/modules/java/generator/../generator/gen_java.py", line 492, in gen
        self.save(cpp_file, T_CPP_MODULE.substitute(m = module, M = module.upper(), code = moduleCppCode.getvalue(), includes = "
    ".join(includes)))
      File "/home/darkchii/下载/opencv-3.4.1/modules/java/generator/../generator/gen_java.py", line 441, in save
        f.write(buf)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 215-216: ordinal not in range(128)
    make[2]: *** [CMakeFiles/dephelper/gen_opencv_java_source] 错误 1
    make[1]: *** [modules/java_bindings_generator/CMakeFiles/gen_opencv_java_source.dir/all] 错误 2
    make: *** [all] 错误 2
    

      于是将源文件中441行:

    f.write(buf)
    

      修改为:

    f.write(buf.encode('utf-8'))
    

      即可,然后重新make,于是我的问题就全解决了~ 

      ps:安装好以后,在gcc编译使用OpenCV的实例代码的时,如果出现'xxx'未定义的引用的ld错误,则需要在编译语句后加上链接库,例如:

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

      

  • 相关阅读:
    git线上操作
    IDEA快捷方式
    Java 四种线程池
    java 获取当前天之后或之前7天日期
    如何理解AWS 网络,如何创建一个多层安全网络架构
    申请 Let's Encrypt 通配符 HTTPS 证书
    GCE 部署 ELK 7.1可视化分析 nginx
    使用 bash 脚本把 AWS EC2 数据备份到 S3
    使用 bash 脚本把 GCE 的数据备份到 GCS
    nginx 配置 https 并强制跳转(lnmp一键安装包)
  • 原文地址:https://www.cnblogs.com/darkchii/p/9138192.html
Copyright © 2011-2022 走看看