Ubuntu下程序的编译和链接过程和openCV的makefile文件
来源:互联网 发布:录音合成软件 编辑:程序博客网 时间:2024/05/20 05:54
简述
在windows下编程,可能一个F5就能让代码跑起来,那是因为IDE(比如VS2103等)已经帮你做好了后台的编译和链接过程。当在Ubuntu下让代码跑起来,就要自己去理解代码的编译和链接过程。
下面说说什么是编译,什么是链接:
编译就是将源文件通过Complier,生成中间文件,在windows下,中间文件就是.obj 文件,在Ubuntu下,就是.o文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。过程
在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现。你需要指定函数的Object File.
-makefile文件
make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。
那怎么写makefile文件呢,这就是个让菜鸟尴尬的问题了,本人也是刚刚了解,说说自己对makefile规范的了解;
下面写一个C++编译openCV3.0的代码的makefile文件书写:
这里我的openCV装的是openCV3.2,并且借用了pkg-config 命令;
首先简单说下pkg -config命令:
pkg-config 当你从源代码编译软件时,用来提供依赖库的信息的软件
终端输入
pkg-config opencv --libs --cflags
显示
就可以看到编译和链接所需要的头文件目录和库文件目录。
如果发现不正确,可以修改/usr/local/lib/pkgconfig/opencv.pc文件,这个文件就是opencv的目录配置
目录截图为:
这个文件就记录着opencv库的版本、编译参数、链接参数等信息
- 给出我的刚刚写的makefile吧
INCLUDE = $(shell pkg-config --cflags opencv)LIBS = $(shell pkg-config --libs opencv)OBJECTS = LaneDetector.o mian.o//中间文件SOURCE = LaneDetector.cpp mian.cpp //源文件//不同的工程也就是修改这两行里面的内容BIN = bin$(OBJECTS) : $(SOURCE)//编译 g++ -c $(SOURCE)$(BIN):$(OBJECTS)//链接 g++ -o $(BIN) $(OBJECTS) -I $(INCLUDE) $(LIBS)clean: rm $(OBJECTS) $(BIN)
运行代码,直接在终端输入
make bin./bin
然后代码就跑起来了
××最后注意,要直接复制我的makefile文件,把//的中文注释删除了哈。
- Ubuntu下程序的编译和链接过程和openCV的makefile文件
- make和makefile以及程序的编译和链接过程
- make,makefile和程序的编译链接过程
- Makefile详解-程序的编译和链接
- 程序编译过程和Makefile的作用
- Ubuntu下OpenCV多文件程序的Makefile
- c程序的编译和链接过程
- 程序的编译和链接过程
- 程序的编译和链接过程
- Makefile之关于程序的编译和链接
- linux下程序的编译和链接
- 编译和链接的过程
- C语言程序的编译和链接过程
- C语言程序的编译和链接过程
- C语言程序的编译和链接过程
- gcc程序的编译过程和链接原理
- 程序的编译和链接
- 程序的编译和链接
- 消息队列
- Android短信发送流程之长短信发送(原)
- UE4学习笔记
- 016最新iOS视频 小马哥十一期OC/Swift/HTML5/React Native视频
- 【翻译】对比Angular1和Angular2中的依赖注入
- Ubuntu下程序的编译和链接过程和openCV的makefile文件
- linux eval命令
- html的src引用七牛的连接,页面加载出现403
- 2017年要学习的三个CSS新特性
- “extern ”和 “static ” 遇上了,就提一點!
- MySql表结构修改详解
- XCAT的安装与简单使用
- C++中的对象模型
- Retrofit缓存