【软件工具】编译原理简介与工程实践

2024-02-19 08:28

本文主要是介绍【软件工具】编译原理简介与工程实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引论

  1. 静态VS动态
    有3个角度:策略、作用域、内存位置。静态策略即编译时刻判定,动态策略即运行时刻。
    名字、位置、值,两者之间通过环境、状态两种映射来表示。

    环境
    状态
    名字
    变量

    静态与动态作用域
    动态策略处理时间的方式与静态作用域处理空间的方式类似。

    过程、函数与方法
    函数是一种有返回值的过程,方法表示过程或函数,但总是和类相关联。

  2. 编译技术的应用

    高级程序设计语言:Java没有指针和指针运算。
    针对计算机体系结构的优化,高性能系统的两类技术:并行、内存层次。

简单的语法制导翻译器

语法可以指导程序的翻译。
上下文无关文法,或文法:用于描述语法的表示方法。文法被用于编译器的前端。
箭头表示“具有如下形式”。
终结符号:数、运算符、关键字。
非终结符号:名字。
文法不是具体的程序,表达的是规则。如,产生式,
l i s t → l i s t + d i g i t list \rarr list + digit listlist+digit
表示这样的规则:任何一个列表后跟一个符号+以及另一个数位,可产生一个新列表。

语法树

工程

gcc

gcc是C Compiler(C 编译器),g++是C++ Compiler(C++编译器)。
设置调试模式

g++ -g ...

使用OpenCV库

g++ ... $(pkg-config --libs opencv)

CMake

cmake -DWITH_ADE=OFF -DCMAKE_BUILD_TYPE=Release ../../
set(CMAKE_BUILD_TYPE Release)

调试工具

  1. gdb, 用于调试C++
  2. pdb, Python

问题

  1. 程序编译为动态库,其依赖的程序库为静态库,编译错误,将要编译程序改为静态库解决,有么有办法使得动态库依赖静态库?

这篇关于【软件工具】编译原理简介与工程实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/724097

相关文章

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性: