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

【Linux 程序】1. 程序构建

文章目录

  • 【 1. 配置 】
  • 【 2. 编译 】
    • makefile编写的要点
    • makefile中的全局自变量
    • CMake
    • 编译依赖的库
    • g++编译
  • 【 3. 安装 】

  • 一般源代码提供的程序安装需要通过配置、编译、安装三个步骤;
    1. 配置。检查当前环境是否满足要安装软件的依赖关系,以及设置程序安装所需要的初始化信息,比如安装路径,需要安装哪些组件;配置完成,会生成 makefile文件 供第二步make使用。
    2. 编译。是对源文件进行编译链接生成可执行程序。
    3. 安装。将生成的可执行文件拷贝到配置时设置的初始路径下。

【 1. 配置 】

  • 查询可用的配置选项
./configure --help
  • 配置路径
    –prefix 是配置使用的最常用选项,设置程序安装的路径。
./configure --prefix=/usr/local/snmp

【 2. 编译 】

  • 编译使用make编译:
    通过-f选项显示指定需要编译的makefile;如果待使用makefile文件在当前路径,且文件名为以下几个,则不用显示指定。
make -f myMakefile

makefile编写的要点

  • 必须满足第一条规则,满足后停止。
  • 除第一条规则,其他无顺序。

makefile中的全局自变量

  • $@目标文件名
  • @^所有前提名,除副本
  • @+所有前提名,含副本
  • @<一个前提名
  • @?所有新于目标文件的前提名
  • @*目标文件的基名称

CMake

CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。能够输出各种各样的makefile或者project文件。使用CMake,能够使程序员从复杂的编译连接过程中解脱出来。它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以生成标准的构建文件,如 Unix/Linux 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。

编译依赖的库

  • 链接多库时,多个库之间如果有依赖,需要注意书写的顺序,右边是左边的前提。
  • makefile编译过程中所依赖的非标准库和头文件路径需要显示指明:
CPPFLAGS -I标记非标准头文件存放路径
LDFLAGS  -L标记非标准库存放路径
  • 如果CPPFLAGS和LDFLAGS已在用户环境变量中设置并且导出(使用export关键字),就不用再显示指定
make -f myMakefile LDFLAGS='-L/var/xxx/lib -L/opt/mysql/lib'CPPFLAGS='-I/usr/local/libcom/include -I/usr/local/libpng/include'

g++编译

  • 基本语法
    • -o:指明生成的目标文件。
    • -g:添加调试信息。
    • -E:查看中间文件。
g++ -o unixApp unixApp.o a.o b.o
  • 应用:查询宏展开的中间文件:
    在g++的编译选项中,添加 -E选项,然后去掉-o选项 ,重定向到一个文件中即可:
g++ -g -E unixApp.cpp  -I/opt/app/source > midfile
  • 查询应用程序需要链接的库:
$ldd myprogrammerlibstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000)libm.so.6 => /lib64/libm.so.6 (0x0000003996400000)libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000)libc.so.6 => /lib64/libc.so.6 (0x0000003995800000)/lib64/ld-linux-x86-64.so.2 (0x0000003995400000)

【 3. 安装 】

  • 将生成的可执行文件拷贝到配置时设置的初始路径下:
    其实 install 就是makefile中的一个规则,打开makefile文件后可以查看程序安装的所做的工作;
make install

相关文章:

【Linux 程序】1. 程序构建

文章目录 【 1. 配置 】【 2. 编译 】makefile编写的要点makefile中的全局自变量CMake编译依赖的库g编译 【 3. 安装 】 一般源代码提供的程序安装需要通过配置、编译、安装三个步骤; 配置。检查当前环境是否满足要安装软件的依赖关系,以及设置程序安装所…...

GLTF 编辑器实现逼真3D动物毛发效果

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 要实现逼真的3D动物毛发效果,可以采用以下技术和方法&…...

【Go语言入门:Go语言的方法,函数,接口】

文章目录 4.Go语言的方法,函数,接口4.1. 方法4.1.1. 指针接受者4.1.2. 值接收者和指针接收者有什么区别?4.1.3. 方法 4.2. 接口4.2.1. 接口定义 4.3. 函数4.3.1. 函数介绍 4.Go语言的方法,函数,接口 4.1. 方法 4.1.1…...

vue-cli3/webpack打包时去掉console.log调试信息

文章目录 前言一、terser-webpack-plugin是什么?二、使用配置vue-cli项目 前言 开发环境下,console.log调试信息,有助于我们找到错误,但在生产环境,不需要console.log打印调试信息,所以打包时需要将consol…...

企业品牌推广在国外媒体投放的意义和作用何在?

海外广告投放是企业在国际市场推广的重要战略,具有多种形式,包括社交媒体广告、短视频广告、电视广告等。这些广告形式在传播信息、推动销售、塑造品牌形象等方面发挥着独特的作用。 其中软文发稿是一种注重叙事和信息传递的广告形式,对于企…...

ArcGIS批量计算shp面积并导出shp数据总面积(建模法)

在处理shp数据时, 又是我们需要知道许多个shp字段的批量计算,例如计算shp的总面积、面积平均值等,但是单个查看shp文件的属性进行汇总过于繁琐,因此可以借助建模批处理来计算。 首先准备数据:一个含有多个shp的文件夹。…...

代码质量评价及设计原则

1.评价代码质量的标准 1.1 可维护性 可维护性强的代码指的是: 在不去破坏原有的代码设计以及不引入新的BUG的前提下,能够快速的修改或者新增代码. 不易维护的代码指的是: 在添加或者修改一些功能逻辑的时候,存在极大的引入新的BUG的风险,并且需要花费的时间也很长. 代码可…...

编程笔记 html5cssjs 012 HTML分块

编程笔记 html5&css&js 012 HTML分块 一、HTML 块级元素二、HTML 内联元素三、HTML <div> 元素四、HTML <span> 元素五、HTML<article>元素六、<article>元素和<div>元素的区别与联系小结 像报纸排版一样&#xff0c;很多时候需要把平面…...

【持续更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;2&#xff09;需求描述 &#xff08;3&#xff09;界面原型 &#xff08;4&#xff09;数据库设计 &#xff08;5&#xff09;后端工程 接下来我们使用uniappspringboot实现一个简单的前后端分离的小项目----个…...

nginx+rsyslog+kafka+clickhouse+grafana 实现nginx 网关监控

需求 我想做一个类似腾讯云网关日志最终以仪表方式呈现&#xff0c;比如说qps、p99、p95的请求响应时间等等 流程图 数据流转就像标题 nginx ----> rsyslog ----> kafka —> clickhouse —> grafana 部署 kafka kafka 相关部署这里不做赘述&#xff0c;只要创…...

User maven 通过什么命令能查到那个包依赖了slf4j-simple-1.7.36.jar

要在 Maven 项目中查找哪个包依赖了 slf4j-simple-1.7.36.jar&#xff0c;您可以使用 Maven 的依赖树命令 mvn dependency:tree。这个命令会展示项目所有依赖的层次结构&#xff0c;包括传递依赖&#xff08;即一个依赖的依赖&#xff09;。然后&#xff0c;您可以搜索或过滤输…...

什么牌子冻干猫粮性价比高?性价比高的五款冻干猫粮牌子推荐

很多养猫的小伙伴们都磨刀霍霍准备给猫咪屯些猫冻干吧&#xff0c;特别是家里有挑食猫咪的家庭。有养猫的铲屎官们应该都知道&#xff0c;猫咪是对蛋白质的需求量很高&#xff0c;而且对植物蛋白的吸收效率比较低&#xff0c;所以蛋白质最好都是来自动物的优质蛋白。猫咪挑食就…...

扫描全能王启动鸿蒙原生应用开发,系HarmonyOS NEXT智能扫描领域首批

近期&#xff0c;“鸿蒙合作签约暨扫描全能王鸿蒙原生应用开发启动仪式”&#xff08;简称“签约仪式”&#xff09;正式举行。合合信息与华为达成鸿蒙合作&#xff0c;旗下扫描全能王将基于HarmonyOS NEXT正式启动鸿蒙原生应用开发。据悉&#xff0c;扫描全能王是鸿蒙在智能扫…...

[Angular] 笔记 8:list/detail 页面以及@Input

1. list 页面 list/detail 是重要的 UI 设计模式。 vscode terminal 运行如下命令生成 detail 组件&#xff1a; PS D:\Angular\my-app> ng generate component pokemon-base/pokemon-detail --modulepokemon-base/pokemon-base.module.ts CREATE src/app/pokemon-base/p…...

Zabbix“专家坐诊”第221期问答汇总

问题一 Q&#xff1a;使用官方docker模板Template App Docker&#xff0c;监控docker镜像&#xff0c;有一项监控项docker.data_usage有报错&#xff0c;不知道哪里问题&#xff1a;Cannot fetch data: Get “http://1.28/system/df”: context deadline exceeded (Client.Time…...

Netty—Reactor线程模型详解

文章目录 前言线程模型基本介绍线程模型分类Reactor线程模型介绍Netty线程模型&#xff1a; 传统阻塞IO的缺点Reactor线程模型单Reactor单线程模式单Reactor多线程模式主从Reactor多线程Reactor 模式小结 Netty 线程模型案例说明&#xff1a;Netty核心组件简介ChannelPipeline与…...

开源verilog模拟 iverilog verilator +gtkwave仿真及一点区别

开源的 iverilog verilator 和商业软件动不动几G几十G相比&#xff0c;体积小的几乎可以忽略不计。 两个都比较好用&#xff0c;各有优势。 iverilog兼容性好。 verilator速度快。 配上gtkwave 看波形&#xff0c;仿真工具基本就齐了。 说下基本用法 计数器 counter.v module…...

mysql中按字段1去重,按字段2降序排序

数据举例 sql语句 按字段field4降序排序&#xff0c;按字段field1去重 SELECT tt1.name2,tt1.field1,tt1.field2,tt1.field4 from ( select tt2.name2,tt2.field1,tt2.field2,tt2.field4 from t2 tt2 ORDER BY tt2.field4 DESC ) tt1 GROUP BY tt1.field1执行结果...

OCP NVME SSD规范解读-4.NVMe IO命令-2

NVMe-IO-3&#xff1a; 由于设备具有掉电保护功能&#xff08;如Power Loss Protection&#xff0c;PLP&#xff09;&#xff0c;因此在以下情况下&#xff0c;性能不应降低&#xff1a; FUA&#xff08;Force Unit Access&#xff09;&#xff1a;是计算机存储设备中的一种命…...

平凯数据库亮相 2023 信息技术应用创新论坛

11 月 25 日&#xff0c;2023 信息技术应用创新论坛在常州开幕。江苏省工业和信息化厅副厅长池宇、中国电子工业标准化技术协会理事长胡燕、常州市常务副市长李林等领导出席论坛并致辞。中国工程院院士郑纬民出席并作主题报告。来自产学研用金等各界的千余名代表参加本次论坛。…...

2024深入评测CleanMyMac X4.14.6破解版新的功能

随着时间的推移&#xff0c;我们的Mac电脑往往会变得越来越慢&#xff0c;存储空间变得越来越紧张&#xff0c;这时候一个优秀的清理工具就显得尤为重要。作为一款备受好评的Mac清理工具&#xff0c;它能够为你的Mac带来全方位的清理和优化。在本文中&#xff0c;我们将深入评测…...

WPF+Halcon 培训项目实战(8):WPF+Halcon初次开发

前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享&#xff0c;想要源码或者教学视频可以和他联系一下。 相关链接 微软系列技术教程 WPF 年度公益课程 Halcon开发 CSD…...

Vue - 实现文件导出文件保存下载

1 文件导出&#xff1a;使用XLSX插件 需求背景&#xff1a;纯前端导出&#xff0c;如 在前端页面勾选部分表格数据&#xff0c;点击"导出"按钮导出Excel文件。 实现思路&#xff1a; 1.通过XLSX插件的 XLSX.utils.book_new()方法&#xff0c;创建excel工作蒲对象wb…...

c基础学习(一)

学习网站&#xff1a; C语言的过去与未来 - C语言教程 - C语言网 (dotcpp.com)https://www.dotcpp.com/course/c-intros/ C 语言简介 - C 语言教程 - 网道 (wangdoc.com)https://wangdoc.com/clang/intro 变量&#xff1a; #include<stdio.h> /*引入头文件-- 标准…...

c语言的文件操作

当涉及到C语言中的文件操作时&#xff0c;我们需要了解一些基本的概念和函数。首先&#xff0c;让我们来看看如何打开和关闭文件&#xff0c;以及如何读取和写入文件。 要打开文件&#xff0c;我们使用fopen函数。这个函数接受两个参数&#xff1a;文件名和打开模式。打开模式…...

C语言 volatile关键字

volatile关键字介绍 volatile 是一个关键字&#xff0c;用于修饰变量&#xff0c;表示该变量是易变的&#xff0c;即可能在任何时候被意外地改变。在多线程编程中&#xff0c;当多个线程同时访问同一个变量时&#xff0c;由于线程之间的交互和优化&#xff0c;可能会导致变量的…...

IDEA快捷使用-快捷键模板

常用快捷模板 .方法的使用,例如输入 arr.null 回车 其他常规方法直接输入回车&#xff0c;不需要对象通过.来调用。 创建变量 psfi 创建公开int类型常量 public static final int prsf 创建 私有静态变量 private static final psf 创建公开静态变量 public static final创…...

在VMware安装CentOS 7:详细教程

安装准备工作 本地虚拟机&#xff1a;我这里使用的是VMware Workstation 17 Pro centos7系统ISO镜像&#xff1a;我这里使用的是CentOS-7-x86_64-DVD-2009.iso&#xff0c;具体的下载地址是在阿里云官方镜像站&#xff1a;centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿…...

[Angular] 笔记 10:服务与依赖注入

什么是 Services & Dependency Injection? chatgpt 回答&#xff1a; 在 Angular 中&#xff0c;Services 是用来提供特定功能或执行特定任务的可重用代码块。它们可以用于处理数据、执行 HTTP 请求、管理应用程序状态等。Dependency Injection&#xff08;依赖注入&#…...

【产品经理】axure中继器的使用——表格增删改查分页实现

笔记为个人总结笔记&#xff0c;若有错误欢迎指出哟~ axure中继器的使用——表格增删改查分页实现 中继器介绍总体视图视频预览功能1.表头设计2.中继器3.添加功能实现4.删除功能实现5.修改功能实现6.查询功能实现7.批量删除 中继器介绍 在 Axure RP9 中&#xff0c;中继器&…...

内部卷网站怎么做的/seo指搜索引擎

原文地址&#xff1a;php 冒泡 插入 交换法 选择法 几种排序作者&#xff1a;我爱高进// 冒泡排序 function BubbleSort($arr) { // 获得数组总长度 $num count($arr); // 正向遍历数组 for ($i 1; $i < $num; $i) { // 反向遍历 for ($j…...

如何做ibanker网站/2024年最新时事新闻

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5200 ,数据离线处理。 这是BestCoder Round #36的C题&#xff0c;比赛时自己用线段树做&#xff0c;姿势不够优美&#xff0c;TLE了&#xff0c;后来才想到用离线处理的话很简单。 解法&#xff1a; 先把所有的…...

网站建设中图片/网络营销专家

Alpha版本测试报告 1.测试找出的BUG 1.1 修复的bug * 注册接口后台没完善数据校验&#xff0c;导致会上传一些不合法的数据 * 用户保持登陆态的session内含字段出现错误 * 新增商品时没有对商品图片进行类型限制 * 买下的闲置物品依旧会出现在全部商品的界面 * 显示闲置物品时&…...

sap.net怎么做网站/湖南网站建设推荐

夜光序言&#xff1a; 如果爱你可以让你幸福,那我就爱你;如果爱你不能让你幸福,那我就只喜欢你. 正文&#xff1a; 以道御术 / 以术识道 // pages/category/category.js //0 引入 用来发送请求的 方法 一定要把路径补全 import…...

菏泽哪里做网站/江苏建站

最近参与一个开源项目&#xff0c;一个功能的实现&#xff0c;用到了 druid 解析器来解析SQL&#xff0c;记录下如果使用 druid 来解析SQL&#xff0c;实现对SQL的拦截改写。1. 对 insert 语句进行解析&#xff1a;private static String convertInsertSQL(String sql){try{MyS…...

手机做任务网站/广州今日头条新闻

今天经济半小时专门挖掘了一下 小学奥数的市场有多大&#xff0c;恰前几天同事们讨论小学生的学习&#xff0c;真实提这些小孩感到悲哀啊&#xff0c;我们那会就没有这么悲惨的童年生活啊。hr姐姐找我帮他小孩做一道奥数题&#xff0c;我做了20分钟答案还是错的&#xff08;前提…...