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(); return ;
一、编译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---------------------------
()g++ opencv.cpp -o opencv #会报错 ()因为在执行时没有将OpenCV的库包含进去,可以使用如下命令进行编译:
g++ `pkg-config opencv --cflags` opencv.cpp -o opencv `pkg-config opencv --libs` ()生成名字为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++程序
Ubuntu系统---编译opencv程序的几种方式g++、Makefile、Cmake的更多相关文章
- Ubuntu系统---配置OpenCV
Ubuntu系统---配置OpenCV 目录 一.Ubuntu下配OpenCV 二.Ubuntu下配python-opencv 说明 上述一.二两种方式,配置OpenCV还是有区别的.按个人已有知 ...
- [置顶] ubuntu12.04下编译opencv程序
ubuntu12.04下编译opencv程序 1.在ubuntu下安装好 opencv后(建议使用apt-get install 来安装) 2.使用程序FaceExaple.c来进行测试程序 #inc ...
- 使用Ubuntu系统编译安装Zabbix企业级监控系统
使用Ubuntu系统编译安装Zabbix企业级监控系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Ubuntu系统部署笔记:https://www.cnblogs.com/ ...
- ubuntu下编译java程序
ubuntu下编译java程序 首先需要安装jdk,并配置好相应环境变量 下面以简单的HelloWorld为例 文件名为HelloWorld.java java代码: public class Hel ...
- PythonDay02——编程语言、python介绍以及安装解释器、运行程序的两种方式、变量
一.编程语言 1.1 机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2 汇编语言:用英文标签取代二进制指令去编写程序,本质也是直接控制硬件 1.3 高级语言:用人能理解的表达方式 ...
- day2 编程语言介绍、Python运行程序的两种方式、变量
一 编程语言介绍 1. 机器语言 用计算机能理解的二进制指令直接编写程序,直接控制硬件 2. 汇编语言 用英文标签取代二进制指令编写程序,本质也是直接控制硬件 3. 高级语言 用人能理解的表达方式去编 ...
- 操作系统+编程语言的分类+执行python程序的两种方式+变量
1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把 ...
- 执行Go程序的三种方式及Go语言关键字
执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...
- 周一02.3运行python程序的两种方式
一.运行python程序的两种方式 方法一:交互式: 优点:输入一行代码立刻返回结果 缺点:无法永久保存代码 方法二: ...
随机推荐
- 汉化Git Gui
先来一个图: 其实使用自带的图形化操作git还是很方便的,但是英文界面还是让相当一部分小伙伴不太舒服,比如我哈. 汉化包地址:链接: https://pan.baidu.com/s/1qQtBUsf1 ...
- 利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图、折线图、饼图
利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图.折线图.饼图 数据: 折线图代码: import pandas as pdimport matplotlib. ...
- 【长期更新】Leetcode刷题心得与思考
1.递归与动态规划的思考 Leetcode第95题 递归问题最重要的问题是想明白函数的作用是什么? 这个例子中函数的返回值就是给定a-b这个区间的数字,返回它所有可能的Tree,此时你不需要明白具体怎 ...
- nginx location 优先级
location 顺序/优先级: location = > location 完整路径 > location ^~ 路径 > location ~,~* 正则顺序 > ...
- Java线程池的使用方式,核心运行原理、以及注意事项
为什么需要线程池 java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率. 为了解决上面的问题,java中引入了线程池,可以使创 ...
- AirFlow后台运行调度程序
nohup airflow worker>>$AIRFLOW_HOME/airflow-worker.log >& & nohup airflow scheduler ...
- 开始使用 git(配置+常用命令)
▶ 注意 页面显示问题: -- 是两个短横线 - 是一个横短线 由于显示问题导致两个短横线之间没有空格,看起来像是一条横线,实则是两条短横线 ▶ git 常用命令 ◆ git add ● git ad ...
- C++Primer 5th Chap9 Sequential Container
vector 可变大小数组,支持快速随机访问(在除了尾部之外部分插入删除元素很慢) deque 双端队列,支持快速随机访问(在头尾插入删除元素很快) list 双向链表,仅支持双向顺序访问(在任何位置 ...
- Windows 32位-调试与反调试
1.加载调试符号链接文件并放入d:/symbols目录下. 0:000> .sympath srv*d:\symbols*http://msdl.microsoft.com/download/s ...
- Mysql分表和分区的区别、分库和分表区别
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法. 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个 ...