编译链接

目录

1,编译链接

(1)预处理(预编译)

(2)编译

(3)汇编

(4)链接

2,编译过程

(1)词法分析

(2)语法分析

(3)语义分析

3,链接


1,编译链接

编译链接分为4个步骤:预处理、编译、汇编、链接

(1)预处理(预编译)

预编译过程把源文件变成.i文件,主要处理以#开头的预编译指令,比如#include、#define等

主要处理规则:

(2)编译

编译是把预处理完的文件进行一系列词法分析、语法分析、语义分析、优化后,生成相应的汇编代码文件.s。

(3)汇编

汇编器将汇编代码变成机器指令,没有复杂语法,也没有语义,也不需要优化,只需要一一对应的翻译即可,最后生成目标文件,Windows中的.obj,Linux中的.o。

(4)链接

链接过程把.o文件和.a库文件链接到一起,生成可执行文件。

2,编译过程

(1)词法分析

词法分析就是把源代码变成一个个词,即token,

每个token的类型有关键字、标识符、字面量、特殊符号等。

(2)语法分析

语句分析就是建立语法树,一个语句对应一颗语法树。

(3)语义分析

有些符合语法的句子在语义层面不合法,比如两个指针相乘。

编译器所能分析的是静态语义,即编译器可以确定的语义,另外一种是动态语义,即运行期语义。

3,链接

链接过程主要包括地址和空间分配、符号决议(符号绑定/地址绑定)、重定位等。

各个模块是单独编译的,编译完成之后链接起来的过程叫静态链接。

编译时,对于其他模块的各符号地址都是未知的,先暂时写成0,这里会留一个重定位入口,

链接时,各个符号都有了地址之后,把各模块中各符号的地址都刷新成正确的值,这个过程叫重定位。

动态链接库:Windows中的.dll,Linux中的.so

静态链接库:Windows中的.lib,Linux中的.a

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译链接 C++ OpenCV 项目通常有两种方式,一种是使用 CMakeLists.txt 文件进行编译,另一种是使用 makefile 文件进行编译。 使用 CMake 进行编译链接的步骤如下: 1. 在项目根目录下创建一个 CMakeLists.txt 文件,并添加必要的配置: ``` cmake_minimum_required(VERSION 3.12) project(your_project_name) set(CMAKE_CXX_STANDARD 11) # 设置 OpenCV 路径 set(OpenCV_DIR /path/to/opencv) # 寻找 OpenCV 库 find_package(OpenCV REQUIRED) # 添加头文件路径 include_directories(${OpenCV_INCLUDE_DIRS}) # 添加源文件 add_executable(your_executable_name main.cpp) # 链接 OpenCV 库 target_link_libraries(your_executable_name ${OpenCV_LIBS}) ``` 2. 在项目的 source 目录下创建一个 CMakeLists.txt 文件,并添加需要编译的源文件: ``` add_library(your_library_name SHARED your_source_files.cpp) ``` 3. 创建一个 build 目录,在终端中进入该目录: ``` mkdir build cd build ``` 4. 运行 CMake 生成 Makefile: ``` cmake .. ``` 5. 使用 make 命令进行编译链接: ``` make ``` 6. 最终会在 build/source/lib 目录下生成一个 libyour_library_name.so 的动态库,这就是可供他人调用的动态库。 使用 makefile 进行编译链接的步骤如下: 1. 在项目根目录下创建一个 makefile 文件,并添加必要的配置: ``` CXX = g++ CXXFLAGS = -Wall -std=c++11 LDFLAGS = -L/path/to/opencv/libs LDLIBS = -lopencv_core -lopencv_imgproc -lopencv_highgui your_executable_name: main.o $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) main.o: main.cpp $(CXX) $(CXXFLAGS) -c -o $@ $^ ``` 2. 在项目的 include 目录下放置项目的头文件。 3. 在项目的 source 目录下放置项目的源文件。 4. 在终端中进入项目根目录,并运行命令 make。 5. 最终会在项目根目录生成一个名为 your_executable_name 的可执行文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值