精选文章 源代码编译

源代码编译

作者:文耀的CTO 时间: 2017-06-23 05:07:30
文耀的CTO 2017-06-23 05:07:30

CentOS程序包管理器之编译安装

为什么要进行源代码编译安装?

1.对应的程序包并不能直接获取到;

2.已经编译好的二进制中,尚不包含我们所需要的功能;

3.已经编译好的二进制中,包含的功能太多,我们并不需要;


源代码包有两种:

由程序员直接打包的源代码:name-VERSION.tar.gz

由第三方利用rpm工具制作的rpm源代码包:name-VERIONS-release.src.rpm

/usr/src/name-VERIONS


源代码的组织形式:

1.多文件组成

2.文件中的代码之间,甚至是不同文件的代码段之间都可能存在依赖关系;


源代码的项目管理工具:

C/C++项目管理工具:make

Java项目管理工具:maven


源代码 --> 预处理(预处理器,cpp) --> 编译(编译器,gcc) --> 汇编(汇编器) --> 链接(链接器) --> 用于执行操作的二进制文件


针对于每个需要编译的源代码文件,都可能会有一个或多个被他依赖的文件或他所依赖的文件,这样的信息会被保存到一个配置文件中;这个配置文件会告诉我们:

1.调用哪个预处理器,如何进行预处理;

2.调用哪个编译器,如何进行编译;

3.文件的编译顺序等等;


这类文件一般是makefile,这样的makefile文件并不是事先存在的,也不是对所有用户的需求都一视同仁的;


程序员可以使用专用的工具,来对于所有的源代码文件进行内容分析和抽取,构建出makefile文件,所有的makefile文件都有一个统一的模版——Makefile.in


用户可以根据自己的需要,自行构建makefile文件,从而实现能够满足自己需求的编译过程


帮助用户生成makefile文件的通常是一个名为configure的脚本文件;


开发工具:

autoconf:帮助用户生成configure脚本

automake:帮助用户生成Makefile.in的模版文件


建议:任何的源代码包,在解压缩之后,都会提供INSTALL或README的文档文件,我们在编译操作之前,最好先查阅此类文件的内容, 以确定编译过程;


开源程序的源代码的获取方式:

1.官方自建的站点:

apache.org(ASF)

mariadb.org

...


2.代码的托管站点

SourceForge

Github

code.google.com


需要使用编译器:gcc (GNU C Complier)


开发环境的安装:

CentOS7: 

1.yum groups install "开发工具"

yum groups install "Development Tools"


CentOS6:

yum groupinstall "Development Tools" "Server Platform Development"

"Desktop Platform Development"



2.yum install make automake autoconf gcc glibc qt ncurses


通常来讲,Linux系统中的编译安装程序的三大步骤:

1.configure [options...]

2.make

3.make install


第一步:

./configure [options...] [VAR=VALUE]...

常用选项分类:

1.安装路径的设定:

--prefix=/PATH/TO/SOMEWHERE

指定默认的程序安装路径,如果不给该选项,默认路径/usr/local/

--sysconfdir=DIR

指定配置文件的安装路径


2.系统类型:

3.可选特性:

--disable-FEATURE

在编译过程中禁用某种特性或功能

--enable-FEATURE[=ARG]

在编译过程中启用某个特性或功能


4.可选程序包:

--with-PACKAGE[=ARG]

在编译过程中,选择使用额外的程序包

--without-PACKAGE

在编译过程中,不使用额外的程序包


第二步:

make


第三步:

make install


编译收尾工作:

/usr/local/apache2里面会包含bin, sbin, etc, lib, lib64, include, man, ...


1.导出二进制文件:

创建一个文件: /etc/profile.d/httpd.sh

export PATH=/usr/local/apache2/bin:/usr/local/apache2/sbin:$PATH


2.导出库文件:

创建一个文件:/etc/ld.so.conf.d/httpd.conf

/usr/local/apache2/lib64


ldconfig [-v]


3.导出头文件:

在/usr/include目录中,为编译安装的软件创建头文件的符号链接:

ln -sv /usr/local/apache2/include /usr/include/httpd


4.导出帮助文件:

CentOS6: /etc/man.config

新添加一行:MANPATH=/usr/local/apache2/man


CentOS7: /etc/man_db.conf

新添加一行:MANPATH_MAP=/usr/local/apache2/bin /usr/local/apache2/man


勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:jenkins内存溢出的一些解决过程

下一篇:关于linux系统下批量修改文件名和后缀

您可能感兴趣

  • cocos2d 之lua加密

    加密方式 lua 代码加密方式很很多种,这里只讲最简单的一种,就是把代码编译成二进制字节码。lua 是一门脚本语言,不需要经过编译就可以使用 lua 解释器来执行;但我们也可以把 lua 代码事先编译成二进制文件,这样就达到了加密的方式。 使用 lua 编译器 最简单也最直接的方式就是使用 lua 编译器来编译 lua 代码,编译的方式很简单,打开命令行,输入下面的命令 lucac -o o...

  • OpenCV 识别图片中的米粒个数,并计算米粒的平均面积和长度(转)

    介绍 OpenCV+Python 使用OpenCV构建图像识别算法,识别图片中的米粒个数,并计算米粒的平均面积和长度 软件架构 模块:OpenCV 4.0.0.21 编程语言:Python 3.7.2 编译器:PyCharm 2018 程序设计思路 首先介绍一下程序设计的思路: 图像采集(取到图像):可以用摄像头拍摄或者图片直接导入 图像预处理:对图像进行灰度化 基于灰度的阈值分割:使用局部...

  • 不停机还能替换代码?6年的 Java程序员表示不可思议

    相信很多人都有这样一种感受,自己写的代码在开发、测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,而线上调试代码又很麻烦,让人头疼得很。不过, 阿里巴巴出了一款名叫Arthas的工具,可以在线分析诊断Java代码,让人眼前一亮。 ❞ Arthas 是什么? Arthas(阿尔萨斯) 是阿里开源的一个Java在线分析诊断工具。 Arthas 能解决啥问题? 在日常开...

  • 源码包管理 任务计划——at cron

    一、文件管理 1、源码包管理 (1)概述 Source Code 源代码经过GCC、C++编译环境编译才能运行 可以设定个人设置,开关功能 (2)源码包管理 获取源码包——官网下载到真机,然后 rz 命令上传到虚拟机 ——在网上找到软件包的下载链接,直接 “ wget 链接 ” 就可以下载了 (3)示例——部署 Tengine 下载源码包的命令 [root@localhost ~]# wge...

  • 第9章,软件管理

    第九章下半部分 源码包管理 一,获取源码包 源码包 可以去程序软件的官网获得 比如 二 ,安装步骤 1,进入官网 获得源码包 下载的时候可以获得下载链接 比如我的 然后我们进入xshell 打开模拟器 输入[root@localhost ~]# wget 复制链接 然后我们来准备编译环境 [root@localhost ~]# yum -y install gcc make zlib-dev...

  • IntellIJ IDEA2020新功能

    一、java 1、Java 14支持:记录和模式匹配 IntelliJ IDEA 2020.1添加了对Java 14及其新功能的支持。IDE不仅添加了对Records的完整代码洞察支持,而且还使您能够快速创建新记录并生成其构造函数和组件,并警告存在的错误。您还将发现对instanceof运算符的模式匹配的支持,包括新的检查和快速修复,该快速修复通过用新的简洁模式变量替换它们来快速简化冗长的i...

  • 面试官:说一下你对Java线程之间通信方式的理解

    多线程和并发,在平时开发中有些小伙伴用的不多,但是有些工作经验的面试中还是容易被问到的,故在之后几期先整理一些常见的多线程面试题供参考。 通信方式 ①同步 ②while轮询的方式 ③wait/notify机制 ④管道通信 一,介绍 本文总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码。 二,线程间的通信方式 ①同步 这...

  • 二本学历,五年抄代码经验,疫情期被裁,三个月25K入职字节跳动

    前言 我的个人背景非常简单,也可以说丝毫没有亮点。 学历普通,计算机专业二本毕业,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事Java开发已经5年了,也crud了五年,每天就是抄代码,毫无新意,甚至一度的怀疑人生。 其实很久之前就已经对自己不满了,每次都在想鼓起勇气想去打破困境,去改变自己,然而因为游戏因为玩耍一次又一次的破功;直到这次疫情,强有力的给了我当头一棒。是的,我失业了...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
51CTO

51CTO

51CTO是一家综合的IT技术用户服务平台,立足满足用户多维度需求,为技术用户成长赋能。2005年成立至今,拥有专业主流技术媒体51CTO企业信息化媒体CIOAge中国最大的IT在线教育平台51CTO学院。