linux编译

Java学习之程序运行机制

心已入冬 提交于 2019-12-01 10:10:57
  Java的运行机制是:先编译,后解释。   典型的编译型编程语言是:C和C++。     eg:用c语言编写的*.c文件编译生成*.h文件,通过链接将*.h文件链接成*.exe文件,然后就可以运行,编译型的高级语言程序运行效率高。   典型的解释型编程语言是:Python。     eg:*.py程序运行不会生成中间文件,而是由解释器直接将源文件一边编译,一边解释为可执行的二进制代码。所以解释型的编程语言程序运行效率低。   Java程序运行不同与典型的编译型和解释型编程语言,Java先编译后解释,此时的编译生成的是*.class字节码文件,不管是windows、macos还是linux系统,只要是同一个源代码,编译生成的*.class文件就是相同的,就可以跨平台运行。但是C语言,同样的C语言源代码,用windows编译生成*.h文件就不同与苹果电脑编译生成*.h,所以典型的编译型语言可移植性就差。   Java程序编译生成*.class文件后,需要有虚拟机(JVM)进行解释执行,虚拟机的作用:1.实现不同操作系统下解释运行*.class的技术细节;2.向编译器提供统一的接口,使得编译器不用关心底层是如何实现的。这就很类似于计算机网络中的5层协议栈模型以及操作系统中设备管理的分层。 来源: https://www.cnblogs.com/Luck-365/p/11679423

makefile的隐式规则

杀马特。学长 韩版系。学妹 提交于 2019-12-01 10:07:18
target := exe source_code = hello.c OBJS = $(source_code:.c=.o) $(target):$(OBJS) gcc $^ -o $@ clean: $(RM) $(target) $(OBJS) 一上来直接展示一份makefile代码。 功能: 从功能角度来说,这份makefile代码可以编译出对应的目标文件,并且顺利执行。 思考: 这其实是一份质量不合格的makefile代码。请仔细观察。 。。。。 什么 ? 你看着这个makefile却一点都不觉得奇怪吗?(好吧,难道你平时写makefile都是这样写的? ) 下面我们通过实验来讲解。 做点简单修改,还是上面这份makefile,只修改编译器, 更换为交叉编译器来试试,贴代码: target := exe source_code = hello.c OBJS = $(source_code:.c=.o) $(target):$(OBJS) /usr/external-toolchain/bin/arm-linux-gnueabi-gcc $^ -o $@ clean: $(RM) $(target) $(OBJS) 功能:请问现在更换为交叉编译器,还能编译出正确的目标文件吗? 编译观察: 令人吃惊的答案:编译报错! 解答: 当前截图make报错显示:不是有效格式的.o文件。

make含义

谁说我不能喝 提交于 2019-12-01 09:46:43
make是用来编译的,它从Makefile中读取指令,然后编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。 用法: 1、make: 这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。 如果 在 make 过程中出现 error ,就要记下错误代码(注意不仅仅是最后一行),然后可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址)。 或者系统少了一些依赖库等,这些需要自己仔细研究错误代码。 make 的作用是开始进行源代码编译,以及一些功能的提供,这些功能由他的 Makefile 设置文件提供相关的功能。 比如 make install 一般表示进行安装,make uninstall 是卸载,不加参数就是默认的进行源代码编译。 make 是 Linux 开发套件里面自动化编译的一个控制程序,他通过借助 Makefile 里面编写的编译规范进行自动化的调用 gcc 、ld 以及运行某些需要的程序进行编译的程序。 一般情况下,他所使用的 Makefile 控制代码,由 configure 这个设置脚本根据给定的参数和系统环境生成。 2、make install 这条命令来进行安装(当然有些软件需要先运行 make check 或

版本问题---Bazel与tensorflow的对应关系

雨燕双飞 提交于 2019-12-01 09:37:56
源码安装tf的时候,会用到Bazel,版本不对应,后面会引起好多麻烦。 echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - sudo apt-get update sudo apt-get install bazel 这种安装方式,会把bazel更新到最新的版本,但是编译tensorflow的时候,不同tensorflow要与bazel的版本是对应的,如果这么做的话,后面的操作就会出错,可能还不知道怎么解决。 正确的做法应该是下载对应的版本来安装bazel,tensorflow与bazel的版本应该在tensorflow的官网查找: https://tensorflow.google.cn/install/source linux下tensorflow与python、GCC、Bazel的版本关系,GCC一般支持C++11就可以,但bazel就真的还是要对应好版本,不然一大堆问题,会掉进坑里各种折腾。 Bazel 编译选项 从源代码编译 TensorFlow

用ECL编译字符游戏的跨平台(Linux/OSX/WINDOWS)可执行文件

末鹿安然 提交于 2019-12-01 08:35:07
用ECL编译字符游戏的跨平台(Linux/OSX/WINDOWS)可执行文件 说明 前面我们用 CLISP 写了一个代码超简短的字符游戏, 不过每次运行时都需要通过 Common Lisp 来加载, 本文介绍一种可以把 Common Lisp 代码编译为可执行文件的方法: 用 ECL 把 Common Lisp 程序编译为可执行文件. 这里稍微介绍一下 ECL - Embedded Common Lisp , 也就是嵌入式 Common Lisp , 它采用了一种不同于其他 Common Lisp 实现的内部处理, 具体说就是把 Common Lisp 代码翻译为标准 C 代码, 然后调用系统上的 gcc 进行编译. 所以使用 ECL 的前提是安装好 gcc 编译器. 正因为 ECL 的这种内部处理机制, 所以只要是符合 ANSI Common Lisp 标准的代码都可以由 ECL 编译为可执行文件. 而且因为调用了 gcc 进行实际的编译链接, 所以生成的可执行文件体积非常小. 相关编译命令 编译函数 compile-file , 用于把 Common Lisp 源代码编译为 .fas 文件; 构建函数 c:build-program , 用于调用 gcc 生成可执行文件; 全局变量 c::*delete-files* , 用于设置是否删除中间文件. 假设要编译的文件为 c11

libiec61850开源库源码编译arm-linux版本库

旧时模样 提交于 2019-12-01 08:08:16
软件环境: 系统:ubuntu 14.04 64位Linux系统 交叉编译工具:gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf,安装路径为/usr/local/oecore-x86_64 使用交叉工具链编译arm-linux版本库: 1、下载 下载libiec61850库源码并解压,当前使用的开源库版本为1.0.0版本,存放路径为:/home/u/libiec61850-1.0.0 2、进入源码目录: cd /home/u/libiec61850-1.0.0/ 3、修改make/target_system.mk文件 (1)修改ARM_TOOLCHAIN_PREFIX为指定的交叉编译工具链前缀 这里修改为:arm-angstrom-linux-gnueabi-,即 ARM_TOOLCHAIN_PREFIX=arm-angstrom-linux-gnueabi- 注:确定当前交叉编译工具链方法如下: a、配置环境: source /usr/local/oecore-x86_64/environment-setup-armv7at2hf-vfp-neon-angstrom-linux-gnueabi b、查看当前交叉编译工具链: echo $CC 输出信息如下: arm-angstrom-linux-gnueabi-gcc

Linux源码安装步骤

耗尽温柔 提交于 2019-12-01 07:25:35
来源: https://www.cnblogs.com/benwu/articles/8436209.html 1. 获取源码 2. 查看INSTALL与README文件 (解压后查看INSTALL与README文件,这两个文件中详细介绍了本软件的安装方法和注意事项) 3. 创建Makefile文件 (执行configure命令,生成Makefile文件) 4. 编译 (执行make clean;make命令将源码编译成二进制文件。 PS:make clean命令用来清除上一次编译生成的目标文件。这个步骤可有可无,但为了确保编译的成功,还是加上为好。防止由于软件中含有残留的目标文件导致编译失败) 5. 安装 (执行make install命令将上一步编译好的二进制文件安装到指定的目录中去) 来源: https://www.cnblogs.com/laijinquan/p/11668651.html

python 程序的执行过程

天涯浪子 提交于 2019-12-01 07:07:45
Python程序的执行过程 我们都知道,C语言在执行之前需要将源代码编译成可执行的二进制文件,也就是将源代码翻译成机器代码,这种二进制文件一旦生成,即可用于执行。但是,Python是否一样呢?或许很多人都听过,Python和Java都是半编译半解释的语言,那么问题来了,什么又是半编译半解释呢?这还要从C语言开始说起 比方我们现在有一段C语言写成的程序,我们在一台Linux服务器上编译好了,生成可执行的二进制文件,可是我现在想要在一台Windows的机器上执行这个文件,这是不可能的,原因是因为不同平台间的机器代码是不一样的,在Linux机器上生成的二进制可执行文件,是不能拿到Windows上执行的,甚至都是在Linux上编译的文件,但是用的C编译器不同,一样有可能无法执行。所以,这才有了半编译半解释。 半编译半解释保证,一次编译,到处运行。这是Java的承诺,同样适用于Python。半编译半解释会从源代码中产生一组字节码,它并不是机器代码,但是不管是在Linux还是Windows的机器上,同样的源代码产生的字节码都是一样的,同时它还有个虚拟机,虚拟机会一条一条执行字节码,生成可执行的机器代码交给CPU执行。正是因为字节码和虚拟机这两个特性,使得我们的程序可以正常执行在Linux或Windows机器上 那么你一定好奇,Python的编译器和Python的虚拟机在什么地方呢?于是

python 基础一

会有一股神秘感。 提交于 2019-12-01 04:35:37
一,Python介绍 1. python的出生与应用   Python的作者, Guido von Rossum (吉多·范·罗苏姆,中国Python程序员都叫他 龟叔),荷兰人。1982年,龟叔从阿姆斯特丹大学获得了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,虽然拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的事情。 2019年7月的TIOBE排行榜,Python已经占据第四的位置, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。 目前Python主要应用领域: 云计算 : 云计算最火的语言, 典型应用OpenStack WEB开发 : 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。,

编译链接是如何得到可执行文件的呢?

让人想犯罪 __ 提交于 2019-12-01 04:29:46
盘古开天辟地!我们写了个C语言源文件,那从源文件到可执行程序这中间又发生了什么?编译,链接这些概念又是什么意思?带着对这些问题的好奇,我查了一些资料。其中,主要参考的是《程序员的自我修养》这本书和一些网上的博客。 在 windows 下经常只需要单击 Run 或者 Debug 就可以运行一个C语言程序,这种便利隐藏了背后的复杂机制,而我想知道这背后到底发生了什么。 本文所使用的系统是 ubuntu ,但这些概念也适用于 windows 下。 1. 编译源文件的四个阶段 假如我们写了一个很简单的 helloworld.c 程序: #include <stdio.h> int main(int argc, char *argv[]) { printf("Hello,World!\n"); return 0; } 我们都知道运行命令 gcc helloworld.c -o helloworld 便可以对这个文件进行编译,并命名可执行文件为 helloworld 。然后运行 ./helloworld Hello,World! 便可以执行该文件,但是这背后又经历了什么呢? 注意: 本文并不是一篇严谨的探讨编译过程的文章,只是我对这个问题了解过程的一个梳理。 1.1 预处理(preprocessing) 在预处理阶段,我们可以简单理解就是处理以"#"开始的那些预处理指令,比如说: