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

本文探讨了静态和动态编程策略在策略、作用域和内存位置上的区别,涉及高级语言如Java、编译原理、内存层次优化以及开发工具如gcc、CMake、OpenCV和调试工具如gdb。讨论了如何处理静态库与动态库之间的依赖关系问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引论

  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. 程序编译为动态库,其依赖的程序库为静态库,编译错误,将要编译程序改为静态库解决,有么有办法使得动态库依赖静态库?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值