源程序

unix/linux静态库简介

匿名 (未验证) 提交于 2019-12-02 21:56:30
一、创建静态库: 1.写源程序 2.编译源程序,生成.o文件 3.使用ar打包工具生成静态库 ar -r libxxx.a xxx1.o xxx2.o.../*.o(通配符方式) 4.提供头文件,方便调用 二、使用静态库 1.写调用源程序 xxx.c 2.编译,生成.o文件 gcc -c xxx.c(调用静态库的.c文件) 3.链接共享库文件 gcc test.o -l xxx(静态库去掉lib前缀和.a后缀剩下的名字) -L . ----------{PATH} 如果操作系统支持环境变量LIBRARY_PATH,使用该环境变量可以省略-L 文章来源: unix/linux静态库简介

【软考】【软件设计师】【知识模块】【第2章:程序设计语言基础知识】

旧时模样 提交于 2019-12-02 17:04:01
程序设计语言基础知识 2.1 程序设计语言概述   2.1.1 程序设计语言基本概念     低级语言,面向机器的语言,如汇编语言、机器语言;       特性:进行程序设计效率低,程序的可读性差,难以修改、维护,优势是运行速度特别快;     高级语言,面向各类应用的程序设计语言。如C、C++ 、Java、Python、Delphi 、Pascal、Php          语言处理程序:负责将高级语言翻译成计算机能理解的0和1的程序;     语言之间的翻译基本方式:       汇编、解释、编译;       汇编:对使用汇编语言写成的源程序进行翻译成目标程序(机器可直接执行)的过程;       解释:将源程序翻译成中间代码(需要配合专有解释器才可执行)的过程;       编译:将源程序翻译成机器可直接执行的目标程序的过程;                解释和编译的区别在于:       对源程序进行编译后的目标程序可以在机器上直接执行,不需要源程序和编译程序配合执行;机器上运行的是与源程序等价的目标程序。       对源程序进行解释后的中间代码,需要源程序和解释程序(解释器)配合执行;            程序语言的定义涉及的三个范畴:       语义、语法、语用;     所谓高级语言,即不依赖机器硬件的;     所谓通用的程序设计语言

转载:ITRS/GCRS/J2000坐标系的相互转换

风格不统一 提交于 2019-12-02 12:53:57
———————————————— 版权声明:本文为CSDN博主「云上飞47636962」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u011575168/article/details/52081409 本文主要阐述了目前国际天文界最新规定的岁差章动模型(IAU 2000A/B),并根据此模型给出ITRS,GCRS和 J2000平赤道地心系相互转换的详细步骤。 本文主要依据《IERS Conventions 2003》(IERS Technical Note No. 32)而来,由于文章为英文,且详细叙述了ITRS,GCRS参考系以及岁差章动等模型,会使得读者初次阅读(或天文背景知识不够)产生阅读障碍。笔者也是在多次反复阅读的基础上并参考其它书籍和文献才稍微弄清楚,因此本文是笔者关于此文献的一个总结,希望能够对读者有所帮助。 本文不打算对坐标系转换的理论(岁差章动,极移等)进行详细讲解,仅仅给出坐标转换的基本步骤和必要常识,以便读者根据此文能够迅速掌握ITRS,GCRS和J2000平赤道地心系相互转换的基本原理,并能够依据IERS提供的Fortran源程序进行实际编程应用。 前言 名词缩写和解释 BCRS barycentric celestial reference system

source insight的使用

依然范特西╮ 提交于 2019-12-01 14:43:50
Source Insight是一个功能非常强大的C、C++的代码阅读器,通过工程的管理,Source Insight可实现多文件代码中(C工程或C和ASM的混合工程)的变量、函数的快速定位和搜索,并且对每个打开的源程序(C或C++代码)中的变量和函数的程序语句进行彩色显示等功能。作为读者,通过程序中语句的不同颜色以及变量和函数的快速定位,可以在一个大的工程中快速定位自己所要寻找的函数和程序段、定位变量和函数的定义和声明,大大节约的自己的时间,把精力集中在代码的阅读上。 一、 Source Insight 的安装 Source Insight目前的最新版本是3.5版,它的安装很简单,根据提示一步一步安装即可。 运行Source Insight界面如下: 各工具栏命令如下: 对应的文件菜单的功能 New(快捷键ctrl+N) 新建一个文件 Open(快捷键ctrl+O) 打开一个文件 Save(快捷键ctrl+S) 保存当前打开的文件 Save As(快捷键ctrl+shift+S) 将当前打开的文件保存为其它名子的文件 Save All(快捷键ctrl+A) 保存所有打开的和修改过的文件 Print 打印当前打开的文件 对应的编辑菜单功能 Cut(快捷键ctrl+X) Copy(快捷键ctrl+C) Paste(快捷键ctrl+V) Undo(快捷键ctrl+Z) Redo

C语言编译全过程

為{幸葍}努か 提交于 2019-11-30 19:33:32
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-- > 预编译处理 ( . c ) -- > 编译、优化程序( . s、 . asm)-- > 汇编程序 ( . obj、 . o、 . a、 . ko ) -- > 链接程序( . exe、 . elf、 . axf等) 1 . 编译预处理 读取c源程序,对其中的伪指令(以 # 开头的指令)和特殊符号进行处理 伪指令主要包括以下四个方面: (1)宏定义指令,如 # define Name TokenString, # undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。 (2)条件编译指令,如 # ifdef, # ifndef, # else, # elif, # endif等。 这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉 (3) 头文件包含指令,如 # include "FileName" 或者 #

使用dockerfile 搭建django系统(nginx+redis+mongodb+celery)

旧城冷巷雨未停 提交于 2019-11-29 21:29:59
背景 有需求需要对django系统进行docker化,以达到灵活部署和容灾。该系统基于django 2.2版本开发,数据库采用mongodb,服务器使用nginx,因系统有部分异步任务,异步任务则采用clelery+redis实现。 基于该需求,所采用的思路是:“基于ubuntu16.04”源镜像,根据dockerfile制作各个运行环境的镜像。因docker提倡单应用单镜像,故这里将django源代码程序作为一个镜像、mongodb作为一个镜像、nginx作为一个镜像、redis作为一个镜像。并最终使用docker-compose对这些镜像做编排。(假设当前已了解docker与docker-compose知识) 实现 下面就是一步步制作docker镜像了。关于各个镜像的Dockerfile模板,这里有一个非常好用的 网站 ,可在网站中搜索自己感兴趣的项目,得到其Dockerfile。假设ubuntu16.04的源镜像及版本名为:ubuntu:16.04。 首先我们在宿主机(宿主机为ubuntu16.04系统,用户为user)中建立一个父文件夹例如名为vs,其中的目录如下: mongodb_vs: 存放mongod的数据、配置文件与dockerfile文件; vsapp: 存放django系统的源代码、相关配置文件与dockerfile文件; redis_vs:

C++编辑编译链接运行

痴心易碎 提交于 2019-11-29 21:23:52
  从写一个简单的“hello world!”到完成一个大型程序,当程序从编辑完成到执行成功都会经过5个步骤,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)、链接(Linking)和执行(Executing)。了解这五个过程中所做的工作,对我们理解头文件、库文件等在程序中的作用是有帮助的,而且如果能够清楚的了解编译链接过程,在编程时定位错误,纠正错误,以及编程时手动调整编译器以通过调试有很大帮助。 1.预处理 预处理器,进行预处理。预处理过程主要处理那些源代码文件以“#”开始的预编译指令。比如“#include”、“#define”和条件预编译指令,如“#if”、“#ifdef”等。预处理时,将所有的“#define”删除,展开所有的宏定义,并且替换掉“#include”。    (1)宏定义指令 ,如#define a b。对于这种伪指令,预编译所要做的是将程序中的所有a用b替换,还有#undef,则将取消对某个宏的定义,使以后该串的出现不再被替换。    (2)条件编译指令 ,如#ifdef,#ifndef,#else,#elif,#endif等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。    (3) 头文件包含指令 ,如

编译原理——词法分析器实现

感情迁移 提交于 2019-11-29 20:34:48
词法分析器实现 一、写在前面 编译原理 是软件工程的一项基础的课程, 是研究软件是什么,为什么可以运行,以及怎么运行的学科 ,编译系统的改进将会直接对其上层的应用程序的执行效率,执行原理产生深刻的影响。 编译原理的目的是将源语言翻译成目标语言。 与翻译的区别就是, 编译将高级语言编译成低级语言 。至于达到什么样的低级语言,在不同的系统中是不同的,对于不同的机器都要用相应的指令系统,编译的目的就是将编译出来的语言用目标机的指令系统执行,一般而言是翻译到汇编语言的层次,但也有特例,比如JVM, Java虚拟机是将高级语言编译到中间语言环节 ,对于任何的高级语言,都翻译成相同的自己可以识别的中间语言,这样就可以在不同的机型上运行了,这种独特的创意造就了与平台无关的语言识别器——虚拟机的出现,从本质上来说也是用到了编译原理。编译原理的内容非常丰富,技术非常成熟,有着几十年的研究历史,笔者在大学学习《编译原理》的时候,侥幸在最后的期末考试中获得了满分的优异成绩,这样一门内容丰富、逻辑严谨、极度抽象和形式化的课程,笔者是怎么学的呢,无外乎两个字—— 兴趣 。只要有兴趣,任何困难都会显得微不足道!!!转瞬之间,大学已接近尾声,在即将踏出校门的一刻,突然有种什么事情没有完成的感觉,仔细想想,自己在大学学了很多的知识,自己究竟掌握的怎么样了,是不是很好的收集和整理了?想到这里,不觉出了冷汗,因此

编译原理作业1

依然范特西╮ 提交于 2019-11-29 06:00:46
1)简述编译程序与翻译程序、汇编程序的联系与区别。 答:翻译程序是指把高级语言源程序翻译成机器语言源程序的软件,编译程序属于翻译程序的一种。汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。 2)编译过程包括哪几个主要阶段及每个阶段的主要功能。 答:有6个阶段,分别为: 1、词法分析:功能是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。 2、语法分析:功能是在词法分析的基础上将单词序列组合成各类语法短语,如"程序","语句","表达式"等等。 3、语义分析:功能是审查源程序有无语义错误,为代码生成阶段收集类型信息。 4、中间代码生成:功能是编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。 5、代码优化:功能是对前一阶段产生的中间代码进行变换或进行改造。 6、目标代码生成:功能是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。 3)简述解释程序与编译程序的区别。 答:编译程序是全部编译完后,再一次性执行。而解释程序是一边解释,一边执行,不区分翻译阶段和执行阶段,不形成目标程序。 来源: https://www.cnblogs.com/cnw834575008/p/11457683.html

简述编译程序与翻译程序、汇编程序的联系与区别。

眉间皱痕 提交于 2019-11-29 06:00:27
1.简述编译程序与翻译程序、汇编程序的联系与区别。 翻译程序是指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。 翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。 编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译边执行的程序,如JavaScript、Python等。附C语言编译链接过程: 汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。 编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。 编译过程包括哪几个主要阶段及每个阶段的主要功能。 编译过程包括哪几个主要阶段及每个阶段的主要功能。 词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词, 语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序。 语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息 中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后