zoukankan      html  css  js  c++  java
  • Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake

    Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake

      先建立一个工程(一个文件夹),写好xxx.cpp文件,可以是多个:

    //----------opencv.cpp------------
    #include <iostream>
    #include <opencv2/opencv.hpp>
     
    using namespace std;
    using namespace cv;
     
    int main()
    {
        Mat srcImage = imread("1.jpg");
        imshow("源图像",srcImage);
     
        waitKey(0);
     
        return 0;

    一、编译opencv程序的g++方式

    -------------实践如下---------------------------
    只需要事先准备:opencv.cpp 、 1.jpg
    其他文件是生成的
    ----------------------------------------------------
    (1)g++ opencv.cpp -o opencv

    """/tmp/cczsAsbd.o:在函数‘main’中:
    opencv.cpp:(.text+0x5c):对‘cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)’未定义的引用
    opencv.cpp:(.text+0x90):对‘cv::_InputArray::_InputArray(cv::Mat const&)’未定义的引用
    opencv.cpp:(.text+0xd3):对‘cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)’未定义的引用
    opencv.cpp:(.text+0xfb):对‘cv::waitKey(int)’未定义的引用
    /tmp/cczsAsbd.o:在函数‘cv::Mat::~Mat()’中:
    opencv.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39):对‘cv::fastFree(void*)’未定义的引用
    /tmp/cczsAsbd.o:在函数‘cv::Mat::release()’中:
    opencv.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47):对‘cv::Mat::deallocate()’未定义的引用
    collect2: error: ld returned 1 exit status"""

    (2)因为在执行时没有将OpenCV的库包含进去,可以使用如下命令进行编译:
    g++ `pkg-config opencv --cflags` opencv.cpp  -o opencv `pkg-config opencv --libs`

    (3)生成名字为opencv的可执行文件,接下来运行
    ./opencv

    ---------编译opencv程序的g++方式---------
    -------------事先准备:opencv.cpp 、 1.jpg--------------------------- (1)g++ opencv.cpp -o opencv #会报错 (2)因为在执行时没有将OpenCV的库包含进去,可以使用如下命令进行编译: g++ `pkg-config opencv --cflags` opencv.cpp -o opencv `pkg-config opencv --libs` (3)生成名字为opencv的可执行文件,接下来运行 ./opencv

    二、编译opencv程序的Makefile方式

    暂略

    三、编译opencv程序的cmake方式

    ------------------参考如下----------------------------
    使用cmake编译OpenCV文件

    首先确保已经安装了cmake,然后建立一个CMakeLists.txt文件,输入如下内容

        cmake_minimum_required(VERSION 2.8)
        project(opencv)
        find_package(OpenCV REQUIRED)
        add_executable(opencv opencv.cpp)
        target_link_libraries(opencv ${OpenCV_LIBS})

    project()括号里面填写要生成的文件名称,add_executable()及其后一行类似,然后可以使用cmake命令运行,此次执行

        cmake .
        make
        ./opencv
    --------------------- @原文链接:https://blog.csdn.net/keith_bb/article/details/52864851

    -------------实践如下---------------------------
    只需要事先准备:CMakeLists.txt 、opencv.cpp 、 1.jpg
    其他文件是生成的
    -----------------------
    u@u1604:~/C_learn/opencv/opencv2$ cmake .
    -- The C compiler identification is GNU 5.4.0
    -- The CXX compiler identification is GNU 5.4.0
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/u/C_learn/opencv/opencv2
    u@u1604:~/C_learn/opencv/opencv2$ make
    Scanning dependencies of target opencv
    [ 50%] Building CXX object CMakeFiles/opencv.dir/opencv.cpp.o
    [100%] Linking CXX executable opencv
    [100%] Built target opencv
    u@u1604:~/C_learn/opencv/opencv2$ ./opencv

    ---------编译opencv程序的cmake方式---------
    ------------CMakeLists.txt--------------------------------
    cmake_minimum_required(VERSION 2.8)

    project(opencv)

    find_package(OpenCV REQUIRED)

    add_executable(opencv opencv.cpp)

    target_link_libraries(opencv ${OpenCV_LIBS})

    #project()括号里面填写要生成的文件名称,add_executable()及其后一行类似,然后可以使用cmake命令运行,此次执行

    --------------------执行-----------------------------------
    (1)cmake .
    (2)make
    (3)./opencv
    cmake_minimum_required(VERSION 3.5)#cmake版本
    project( DisplayImage )#项目名称
    find_package( OpenCV REQUIRED )#找到opencv源
    add_executable( DisplayImage main.cpp )#
    target_link_libraries( DisplayImage ${OpenCV_LIBS} )#添加opencv链接选项

    三、g++同时编译多个文件的方法,举例:

       gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步:
    1.预处理,生成.i的文件[预处理器cpp]
    2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]
    3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
    4.连接目标代码,生成可执行程序[链接器ld]

    g++同时编译多个文件的方法,举例:
    
    使用cd命令进入包含源文件的文件夹。通过在命令行上列出文件来编译程序,类型:
    
    方法一:g++ xxx1.cpp xxx2.cpp -o xxx3.out     //两个cpp源文件,编译后只生成一个 .out 文件
    方法二:g++ *.cpp -o xxx2.out                //用*号代替目录下所有要编译的文件, 使用“通配符”编译程序:g++ *.cpp -o xxx2.out -ansi
    Ubuntu gcc多源文件的编译方法
    如果有多个源文件,基本上有两种编译方法:

    [假设有两个源文件为test.c和testfun.c]
    1. 多个文件一起编译
    用法:#gcc testfun.c test.c -o test
    作用:将testfun.c和test.c分别编译后链接成test可执行文件。
    2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
    用法:
    #gcc -c testfun.c //将testfun.c编译成testfun.o
    #gcc -c test.c //将test.c编译成test.o
    #gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
    以上两种方法相比较,
    第一种,编译时需要所有文件重新编译,
    而第二种,可以只重新编译修改的文件,未修改的文件不用重新编译。

    @https://blog.51cto.com/charlesworld/1683821 Ubuntu下用G++编译C++程序

     

  • 相关阅读:
    iOS 面试题 1
    ios 面试题 0
    得到程序包路径
    UISwitch 监听响应
    在[self addsubView:xxx]中,self.name 和 _name的区别
    /调整button的title的位置
    //设置导航条背景图片
    警告框
    @synthesize
    打开控制台选中路径的文件夹
  • 原文地址:https://www.cnblogs.com/carle-09/p/11321834.html
Copyright © 2011-2022 走看看