编译程序

编译型和解释型语言

时光怂恿深爱的人放手 提交于 2020-03-21 16:40:29
目前,常用的解释性语言有 Perl,Python, Lisp/Scheme,Ruby等,究竟什么是解释性语言呢? 所谓的解释性语言主要包括两个方面:以使他们都有自己的解释器,也可以通俗的理解为翻译器;二是他们都是在其他的编译语言(通常是C语言)的基础上定义和扩充了自己的语法结构。 解释性语言的工作原理就是用自己定义的解释其解释并执行有自己定义的语法结构生成的程序代码。所以解释性语言并不编译。这里要区分Java,因为Java并不是单单是一门解释性语言,他为了提高效率而拥有他自己的即时解释器,实际上Java可以算作一门解释和编译的结合语言。 编译型和解释型语言: 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序。 翻 译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的 文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语 言的程序执行效率高。 解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译

grub 修复及 AWK用法

吃可爱长大的小学妹 提交于 2020-03-21 12:37:39
系统启动和内核管理,各种修复及各种编译 Linux就是个内核。 ldd命令可查到每一个程序依赖的库。 Centos6的启动流程及修复 centos6启动步骤概述 1、上电POST自检,加载BIOS的硬件信息,获取第一个启动设备 2、读取第一个启动设备MBR里的引导加载程序(grub)的启动信息 3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备 4、核心执行init程序,并获取默认的运行信息 5、init程序执行/etc/rc.d/rc.sysinit文件 6、启动核心的外挂模块 7、init执行运行的各个批处理文件(scripts) 8、init执行/etc/rc.d/rc.local 9、执行/bin/login程序,等待一会登录 10、登录之后开始以shell控制主机 Bootloader是用来启动操作系统的。实现操作系统的前期引导。 GRUB启动程序是多部份组合而成,其中MBR的前446个字节只是他的第一个阶段。 第二阶段放在了磁盘文件:放在了/boot下的grub文件 内核放在/boot/文件下这就是内核文件 初始化的文件系统:/boot/initramfs - VERSION -release.img 这还是一个打包文件。 :先修改后缀就能解压。 :这个文件的目录和根分区的目录一样。他就是一个缩小版的根。这个文件里面就是一个隐藏版的小内核。 :-

C/C++ 与 Python 的通信

爱⌒轻易说出口 提交于 2020-03-21 07:17:41
作者:Jerry Jho 链接:https://www.zhihu.com/question/23003213/answer/56121859 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 C/C++ 调用 Python (基础篇)— 仅讨论Python官方提供的实现方式 Python 调用 C/C++ (基础篇)— 仅讨论Python官方提供的实现方式 C/C++ 调用 Python (高级篇)— 使用 Cython Python 调用 C/C++ (高级篇)— 使用 SWIG 1 C/C++ 调用 Python(基础篇) Python 本身就是一个C库。你所看到的可执行体python只不过是个stub。真正的python实体在动态链接库里实现,在Windows平台上,这个文件位于 %SystemRoot%\System32\python27.dll。 你也可以在自己的程序中调用Python,看起来非常容易: //my_python.c #include <Python.h> int main(int argc, char *argv[]) { Py_SetProgramName(argv[0]); Py_Initialize(); PyRun_SimpleString("print 'Hello Python!'\n"); Py

java 入门总结 20170906

浪子不回头ぞ 提交于 2020-03-20 20:19:10
java入门总结 java 分为 java ME,java SE,java EE; java ME 是一种微型版(嵌入式),比如安卓嵌入式(机顶盒); java SE 是标准版(桌面应用,由独立的系统比如: windows; 还有 app ),基于JDK(重点:)和JRE; java EE 适用于企业; 计算机高级编程语言:在c语言中每一个程序编译完成之后会自动生成一个“.exe”的文件,从而可以直接执行;但是在java不一样,java有俩中语言,一种解释语言,另一种是编译语言;java程序的文件后缀是“.java”源文件,但并不是真正要使用的程序文件需要将其进行编译成“.class”的字节码文件,然后放在虚拟机上进行解释。 java SE 的特点: 分布性;鲁棒性(稳定性);安全性;可移植性;多线程; 来源: https://www.cnblogs.com/r123/p/7486602.html

gcc

痴心易碎 提交于 2020-03-20 16:46:51
2020-03-20 一、单源文件编译 1. 无选项编译链接 用法: 1 #gcc test.c 作用:将test.c 预处理、汇编、编译并链接形成可执行文 件。这里未指定输出文件, 默认输出为a.ou t。 2. 选项 -o 用法: 1 #gcc test.c -o test 作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。 3. 选项 -E 用法: #gcc -E test.c -o test.i 作用:将test.c预处理输出test.i文件。 4. 选项 -S 用法: #gcc -S test.i 作用:将预处理输出文件test.i汇编成test.s文件。 5. 选项 -c 用法: #gcc -c test.s 作用:将汇编输出文件test.s编译输出test.o文件。 6. 无选项链接 用法: #gcc test.o -o test 作用:将编译输出文件test.o链接成最终可执行文件test。 7. 选项-O 用法: #gcc -O1 test.c -o test 作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。 二. 多源文件的编译方法 如果有多个源文件,基本上有两种编译方法: [假设有两个源文件为test.c和testfun.c] 1. 多个文件一起编译 用法: #gcc

Linux上安装使用boost入门指导

本小妞迷上赌 提交于 2020-03-20 12:55:07
Data Mining Linux上安装使用boost入门指导 获得boost boost分布 只需要头文件的库 使用boost建立一个简单的程序 准备使用boost二进制文件库 把你的程序链接到boost库 1.获得boost 下载boost_1_46_1.tar.bz2 解压 2.boost分布 boost_1_46_1.........................boost根目录   boost/.....................................所有boost头文件   libs/........................................Tests,.cpps,docs等的库文件 注意:   (1)boost根目录(通常是/usr/local/boost_1_46_1)想到$BOOST_ROOT变量中   (2)编译程序时如果用到boost库,需要指定头文件路径-I$BOOST_ROOT   (3)因为所有头文件都在boost文件夹下,并且头文件都是hpp后缀,所#include形如:     #include <boost/whaever.hpp> 3.只需要头文件的库   绝大多数的boost库都是header-noly的:它们完全由包含模板和inline函数的头文件组成,不需要单独编译和二进制库文件

ubuntu下编译安装boost库

Deadly 提交于 2020-03-20 12:54:25
环境:ubuntu 12.04 32bit,boost 1.49 前期准备:boost中,用到了别的函数库,所以为了使用boost中相应的功能,需要先安装系统中可能缺失的库  apt-get install mpi-default-dev  #安装mpi库 apt-get install libicu-dev     #支持正则表达式的UNICODE字符集  apt-get install python-dev     #需要python的话 apt-get install libbz2-dev     #如果编译出现错误:bzlib.h: No such file or directory 上述函数库装好之后,就可以编译boost库了。解压boost_1_49_0.tar.bz2,得到/boost_1_49_0,将当前工作目录切换到此文件夹下。 ./bootstrap.sh 生成bjam,上述命令可以带有各种选项,具体可参考帮助文档: ./bootstrap.sh --help。其中--prefix参数,可以指定安装路径,如果不带--prefix参数的话(推荐),默认路径是 /usr/local/include 和 /usr/local/lib,分别存放头文件和各种库。执行完成后,会生成bjam,已经存在的脚本将会被自动备份。注意,boost 1.49会在当前目录下

cmd中编译和运行java程序

匆匆过客 提交于 2020-03-20 03:18:35
【cmd下编译】 方法一: 1.首先在工程文件夹下面新建一个sourcelist.txt,把所有要编译的java类的绝对路径写进去,每写一个换一行 javac -classpath lib/jxl.jar -sourcepath src @sourcelist.txt -d bin javac -sourcepath src @sourcelist.txt -d class2(没有三方包的情况,我在项目根目录下新建了一个class2文件夹存放编译成功后的.class文件) -d选项就是destination的意思,即生成class文件被送到该选项后面的bin文件夹;-classpath就是将你要用到的jar包注册到类加载路径中;-sourcepath就是告诉javac命令去哪里找类文件。 方法二: 最后呢,为了方便,可以在project文件夹下新建一个run.bat文件,并输入以下内容: javac -classpath lib/jxl.jar -sourcepath src @sourcelist.txt -d bin @pause 【cmd下运行编译好的.class文件】 进入我们编译成功后存放编译文件的class2文件夹 cmd中输入java 包名.编译成功的文件名 (java com.android.socket.server.SocketServer)

【华为云技术分享】如何将90%的代码自动迁移到鲲鹏平台上

荒凉一梦 提交于 2020-03-19 13:25:05
主讲人:华为云云享专家 张老师 大家好,今天要讲的主题是关于软件迁移,这是一个久远的话题,因为但凡牵扯到切换平台、CPU架构的变化,甚至一些语言版本的升级,都可能会面临到软件迁移的问题。今天我们就探讨一下软件移植过程的原理,以及如何进行软件迁移。 在软件移植的过程当中,如何帮助开发者提升效率,如何把华为沉淀下来的软件开发以及移植的经验反馈给开发者,帮助开发者加速软件开发的进度,降低成本,这是我们一直关注的问题,为此,我们还推出了鲲鹏的开发套件,帮助用户做软件的移植,以及做基于鲲鹏平台的性能加速。 其实一提到软件移植,如果是做了比较底层软件的话,大家可能会用到一些 汇编这样的底层语言 。 它和机器的硬件架构强相关 ,当你在从一个平台切换到另外一个平台的时候,这些强相关的语言势必要 进行一次代码移植, 跟我们所采用的编程语言以及移植的平台环境强相关。当我们用汇编代码或者是用这种编译型语言的时候,就会面临着一些移植的问题和挑战,有些问题通过编译器能解决, 有些问题特别是一些低阶的代码或者比较底层的代码, 就要手工去查手册 , 然后去把它相应的转换成新平台所使用的机器码。 上图列出了鲲鹏处理器和x86处理器的指令差异,列了一个简单的两个数相加,两个int型相加的这样一个简单程序。通过GCC编译完之后,通过OMGD,就能看到指令的具体的格式形式以及相应的对应的汇编代码。可以看出

转:gcc编译C++程序

≯℡__Kan透↙ 提交于 2020-03-19 09:53:41
转:http://blog.csdn.net/liujiayu2/article/details/49864381 单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: [cpp] view plain copy print ? /* helloworld.cpp */ #include <iostream> int main( int argc, char *argv[]) { std::cout << "hello, world" << std::endl; return(0); } 程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件: $ g++ helloworld.cpp 编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行: $ ./a.out hello, world 更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件