当前位置: 首页 > news >正文

在Linux上编译软件并且运行的入门示例

一、linux下的编译简述

        我们的系统上安装了许多开源和商业软件包,可供所有用户使用。然而,用户可以在自己的主目录中下载和安装小软件包,这些软件通常只对他们个人有用。

        安装该软件需要执行多个步骤。

  • 找到并下载源代码
  • 解压源码
  • 编译代码
  • 安装生成的可执行文件
  • 设置安装目录的路径

        在上述步骤中,最困难的可能是编译阶段。

1、编译源代码

        所有高级语言代码都必须转换为计算机可以理解的形式。例如,C语言源代码被转换为称为汇编语言的低级语言。然后,前一阶段生成的汇编语言代码被转换为由计算机直接理解的代码片段组成的目标代码。编译程序的最后阶段涉及将所有目标代码片段链接在一起形成单个可执行程序。

        手动执行所有这些步骤非常复杂,超出了普通用户的能力。已经为程序员和最终用户开发了许多实用程序和工具来简化这些步骤。

2、make 和 Makefile

        该make命令允许程序员管理大型程序或程序组的编译。它通过跟踪整个程序的哪些部分已更改,仅编译自上次编译以来已更改的程序部分来帮助开发大型程序。

        该程序从名为Makefilemake的文本文件中获取其编译规则集,该文件与源文件位于同一目录中。它包含有关如何编译软件的信息,例如优化级别、是否在可执行文件中包含调试信息。它还包含有关在何处安装已编译的二进制文件(可执行文件)、手册页、数据文件、依赖库文件、配置文件等的信息。

        某些软件包要求您手动编辑 Makefile 以设置最终安装目录和任何其他参数。然而,许多软件包现在都与 GNU 配置实用程序一起分发。

3、配置

        许多年前,随着 UNIX 和 Linux 变体的增加,编写可以在所有变体上运行的程序变得更加困难。开发人员通常无法访问每个系统,并且某些系统的特性随着版本的不同而发生变化。GNU 配置和构建系统简化了作为源代码分发的程序的构建。所有程序都是使用简单、标准化的两步过程构建的。程序构建者不需要安装任何特殊工具来构建程序。

        shellconfigure脚本尝试猜测编译期间使用的各种与系统相关的变量的正确值。它使用这些值在包的每个目录中创建一个Makefile 。

        编译包的最简单方法是:

  1. cd到包含包源代码的目录。
  2. 键入./configure为您的系统配置包。
  3. 键入make以编译包。
  4. 键入make install以安装程序以及任何数据文件和文档。
  5. (可选)键入make clean以从源代码目录中删除程序二进制文件和目标文件

        配置实用程序支持多种选项。您通常可以使用该--help选项来获取特定配置脚本的功能清单。

        您可能使用的唯一通用选项是--prefix  --exec-prefix 选项。这些选项用于指定安装目录。

        --prefix选项指定的目录将保存与机器无关的文件,例如文档、数据和配置文件。

        --exec-prefix选项命名的目录(通常是 --prefix 目录的子目录)将保存与机器相关的文件,例如可执行文件。

二、下载软件包

        对于这个例子,这里提供一个免费小软件,可以在不同的测量单位之间进行转换。

链接:https://pan.baidu.com/s/12_P_7MrKYRBOLU8Ge4VCpw?pwd=7gby 
提取码:7gby

        下载完成之后解压并进入文件夹

tar -zxvf units-1.87.tar.gz
cd units-1.87

        首先要做的是仔细阅读README和INSTALL文本文件(使用less命令)。这些包含有关如何编译和运行软件的重要信息。units包使用GNU配置系统来编译源代码。我们需要指定安装目录。

$ ./configure --prefix=$HOME/units187

注意:$HOME变量是环境变量的一个示例。$HOME的值是指向主目录的路径。只需键入
echo $HOME就可以显示变量的内容。

        如果 configure 运行正确,它将创建一个包含所有必要选项的 Makefile。

        现在可以继续通过运行make命令来构建包。一两分钟后(取决于计算机的速度),可执行文件将被创建。如果您在屏幕上没有看到任何错误,那么软件很可能已经正确编译。如果一切正常,您现在可以运行make install命令安装软件包。

        这会将文件安装到您指定的~/units187./configure目录中。

        您现在可以运行该软件了(假设一切正常)。

        cd ~/units187

        进入目录之后输入,就会运行程序

./units

        之后就可以按照提示进行输入了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 同城校园跑腿外卖配送平台源码,这套目前全网还没有人分享过
  • 技术学习笔记2:std::bad_cast 在多态编程中有什么作用,如何避免类型转换失败?
  • 面向未来的S2B2C电商供应链系统发展趋势与创新探索
  • 从零入门 AI for Science(AI+药物) #Datawhale AI 夏令营 Task2
  • 使用mysql 的全文检索
  • react native 和 flutter 区别
  • 汇舟问卷:从了解国外问卷工作室开始!
  • idea-常用插件
  • Git远程仓库推送
  • 视频帧的概念
  • Studying-代码随想录训练营day49| 42. 接雨水、84.柱状图中最大的矩形
  • 手摸手教你撕碎西门子S7通讯协议15--开发自己的通讯库写数据
  • Android Studio的新界面,怎么切换回老界面
  • 记录一次使用Docker部署skywalking的过程
  • 基于Hadoop的服装电商数据分析系统【Hdfs、flume、HIve、sqoop、MySQL、echarts】
  • ----------
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Leetcode 27 Remove Element
  • Linux gpio口使用方法
  • Python 基础起步 (十) 什么叫函数?
  • React 快速上手 - 07 前端路由 react-router
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • REST架构的思考
  • 百度小程序遇到的问题
  • 从零开始的无人驾驶 1
  • 关于extract.autodesk.io的一些说明
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 智能合约Solidity教程-事件和日志(一)
  • ​力扣解法汇总946-验证栈序列
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $NOIp2018$劝退记
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Python第六天)文件处理
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (七)Activiti-modeler中文支持
  • (七)Java对象在Hibernate持久化层的状态
  • (循环依赖问题)学习spring的第九天
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (转载)虚函数剖析
  • .htaccess配置重写url引擎
  • .NET 8 跨平台高性能边缘采集网关
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core中的去虚
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET NPOI导出Excel详解
  • .Net Redis的秒杀Dome和异步执行
  • .NET 发展历程
  • /etc/fstab和/etc/mtab的区别
  • @GlobalLock注解作用与原理解析
  • @Resource和@Autowired的区别
  • [145] 二叉树的后序遍历 js
  • [22]. 括号生成