【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年医院设备维修培训安排

在你还考虑该不该干的时候别人已经走好远了 小时候觉得忘带作业是天大的事,高中的时候,觉得考不上大学是天大的事,恋爱的时候,觉得跟喜欢的人分开是天大的事,到现在回头看看,那些难以跨过的山,…

1200PLC连接分布式IO组态编程应用

SMART PLC作为S7-1200PLC的智能IO从站设备组态和编程应用详细介绍请参考下面链接文章: https://rxxw-control.blog.csdn.net/article/details/130257474https://rxxw-control.blog.csdn.net/article/details/130257474这篇博客我们介绍S7-1200PLC和分布式IO连接组…

【C语言深度剖析——第一节(关键字1)】《C语言深度解剖》+蛋哥分析+个人理解

你未曾见过火光,难怪甘愿漂泊寒夜 本文由睡觉待开机原创,未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 首先简单介绍一下《C语言深度解剖》: 全书特点&am…

BUUCTF Reverse/[2019红帽杯]Snake

BUUCTF Reverse/[2019红帽杯]Snake 下载解压缩后得到可执行文件,而且有一个unity的应用程序,应该是用unity编写的游戏 打开是一个贪吃蛇游戏 用.NET Reflector打开Assembly-CSharp.dll。(unity在打包后,会将所有的代码打进一个Ass…

交叉验证的种类和原理(sklearn.model_selection import *)

交叉验证的种类和原理 所有的来自https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation-iterators并掺杂了自己的理解。 文章目录 前言一、基础知识1.1 交叉验证图形表示1.2 交叉验证主要类别 二、部分交叉验证函数(每类一个&#xff0…

K-【学习Diffusers 一】随机种子控制生成 加载自己的UNet

1 控制随机种子 generator torch.Generator("cuda").manual_seed(1024) # 1 导入torch,pipline import torch from diffusers import StableDiffusionPipeline from accelerate import Accelerator# 2 生成种子1024是宇航员种子 generator torch.Generator("…

设计模式Java向

设计原则: 开闭原则: 用例对象和提供抽象功能进行分割,用例不变,抽象功能被实现,用于不断的扩展,于是源代码不需要进行修改,只在原有基础上进行抽象功能的实现从而进行代码扩展。不变源于代码…

【C++入门(一)】:详解C++语言的发展及其重要性

🎥 屿小夏 : 个人主页 🔥个人专栏 : C入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 🌤️什么是C🌤️C的发展史🌤️C的重要性☁️语言的广泛度☁️C的领域⭐…

深入探讨在SpringBoot中分布式锁的实现与应用

当在Spring Boot 中使用分布式锁时,你可以借助各种库和技术来实现。其中,Redis 和 ZooKeeper 是两个常用的分布式锁实现工具。下面将展示如何在 Spring Boot 中使用这两种工具实现分布式锁。 Redis 分布式锁 优点: 简单易用: Re…

绝地求生:大逃杀,鼠标灵敏度设置教程及枪法练习技巧 鼠标灵敏度怎么设置

《绝地求生大逃杀》鼠标灵敏度怎么设置?作为一款FPS游戏,如何调整鼠标参数是大家急需掌握的,今天闲游盒带来“院长尼克”分享的《绝地求生大逃杀》鼠标灵敏度设置教程及枪法练习技巧,废话不多说,下面我们一起来看吧。 …

C语言——小细节和小知识7

一、逆序字符串 1、递归1 #include <stdio.h> #include <string.h>void ReverseArray(char *str) {char temp *str;//1int len (int)strlen(str);*str *(str len - 1);//2*(str len - 1) \0;//3if(strlen(str 1) > 2)//只要字符串还大于2&#xff0c;就…

【nodejs】Express概念与使用介绍

Express Express是基于Node.js平台&#xff0c;从内置模块http封装出来的第三方模块&#xff0c;可以更方便的开发Web服务器。 中文官网&#xff1a; http://www.expressjs.com.cn/ 一、基本使用 // 导入express const express require(express) // 创建web服务器 const a…

SpringBoot 2 集成Spark 3

前提条件: 运行环境&#xff1a;Hadoop 3.* Spark 3.* ,如果还未安装相关环境&#xff0c;请参考&#xff1a; Spark 初始 CentOS 7 安装Hadoop 3 单机版 SpringBoot 2 集成Spark 3 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

JavaScript基础练习题(五)

生成一个范围内的随机整数&#xff1a;编写一个函数&#xff0c;接收两个参数&#xff0c;表示范围的最小值和最大值&#xff0c;然后生成一个在这个范围内的随机整数。 生成指定长度的随机字符串&#xff1a;编写一个函数&#xff0c;接收一个参数表示字符串的长度&#xff0…

【数据结构和算法】---二叉树(2)--堆的实现和应用

目录 一、堆的概念及结构二、堆结构的实现2.1堆向下调整算法2.2堆向上调整算法2.3删除堆顶元素2.4插入元素2.5其他函数接口 三、堆结构的应用3.1堆排序3.2Top-k问题 四、堆概念及结构相关题目 一、堆的概念及结构 如果有一个数字集合&#xff0c;并把它的所有元素按完全二叉树…

MS6459字符叠加可兼容MAX7456

MS6459 是 OSD 电路,与 MCU 配合使用,可控制不同类型的显示系统。显示点阵为 1218&#xff0c;内置部分数字、英文字符、拉丁字符和中文字符。电路集成有上电复位电路和 VRAM 清零电路用于减轻 MCU 的工作量。 主要特点 输入信号&#xff1a;混合视频信号&#xff1b; 显示字符…

ksuser.dll文件缺失怎么办?软件或游戏无法启动,一键自动修复

很多小伙伴反馈&#xff0c;自己的电脑中了病毒&#xff0c;被杀毒软件清理后&#xff0c;在打开游戏或软件的时候&#xff0c;经常会报错“提示无法找到ksuser.dll文件&#xff0c;建议重新安装软件或游戏”。自己根据提示重装后&#xff0c;还是报错&#xff0c;不知道应该怎…

C++ Qt开发:SqlRelationalTable关联表组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍SqlRelationalTable关联表组件的常用方法及灵…

企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment

错误信息 # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc0x00007f218f93485d, pid10, tid58 # # JRE version: OpenJDK Runtime Environment 18.9 (11.0.14.11) (build 11.0.14.11) # Java VM: OpenJDK 64-Bit Server VM 18.9…

【C语言】程序练习(四)

大家好&#xff0c;这里是争做图书馆扫地僧的小白。非常感谢各位的支持&#xff0c;也期待着您的关注。 目前博主有着C语言、C、linux以及数据结构的专栏&#xff0c;内容正在逐步的更新。 希望对各位朋友有所帮助同时也期望可以得到各位的支持&#xff0c;有任何问题欢迎私信与…