(二)掌握最基本的Linux服务器用法——Linux下简单的C/C++ 程序、项目编译

1、静态库与动态库 

 静态库(Static Library):静态库是编译后的库文件,其中的代码在编译时被链接到程序中,因此它会与程序一起形成一个独立的可执行文件。每个使用静态库的程序都会有自己的库的副本,这可能会导致内存浪费。常用后缀名(.a)
优点:
·独立性:库的代码会被静态地链接到程序中,使程序变得独立并能够单独运行。
·版本控制:库的代码被嵌入在程序中,不受外部库版本的影响。
缺点:
·内存浪费:每个使用静态库的程序都会拥有库的一个副本,可能导致内存浪费。
·更新困难:更新库需要重新编译整个程序,部署和维护会相对复杂。

动态库(Dynamic Library):是编译后的库文件,其代码在程序运行时由操作系统加载到内存中。
多个程序可以共享同一个动态库的实例,从而减少内存占用并提高程序的执行效率。动态库文件通常具有.so(Shared Object)后缀名,是一种在运行时动态加载的共享组件。
优点:
内存效率:多个程序可以共享同一个库文件的实例,减少内存使用。
更新和维护:库的更新只需替换库文件,不需要重新编译整个程序。
灵活性:程序可以动态加载和卸载库,提高程序的灵活性和可维护性。
缺点:
运行时依赖:程序在运行时需要动态库的支持,如果缺少库文件,程序将无法运行。
部署复杂性:需要确保目标系统上有正确版本的动态库。

2、软件源码编译与安装

检查编译工具:
在开始编译之前,确保系统中已安装了编译所需的工具,如编译器(例如gcc)、构建工具(如make)和开发库(如libc)等。可以通过包管理工具安装这些工具。
配置编译选项:
进入源代码目录,运行配置脚本以配置编译选项。通常,可以使用 ./configure命令来配置,但一些软件可能有自己的配置脚本。您可以使用不同的选项来启用或禁用功能、指定安装路径等。
编译源代码:
运行make命令来编译源代码。这将生成可执行文件和其他必要的文件。这一步很关键。
安装软件:
运行sudo make install命令以将编译后的文件安装到系统中。这将把文件复制到系统的标准安装路径,通常为/usr/local。
如果感兴趣,可以从网上找一些简单的安装的安装包试一试。

3、C与C++编译过程

编译过程、各种文件、

gcc相关

使用gcc来编译:

方法一、使用gcc单步生成
#预处理,生成中间文件(.i)
        gcc  -E  source.c -o  source.i
#编译,生成汇编代码(.s)
        gcc -s source.i -o source.s
#汇编,生成目标文件(.o)
        gcc -c source.s -o source.o
#链接,生成可执行文件
        gcc source.o -o my_program
方法二、使用gcc保留中间编译结果
gcc  -save-temps  source.c  -o   my_program

gcc的常用编译选项

完整的gcc用法可以通过man gcc命令进行查看

头文件路径选项:
        -I:指定头文件的搜索路径。
多线程选项:
        -pthread:启用POSIX线程支持。
代码生成选项:
        -fPIC:生成位置无关代码。
        -fno-stack-protector: 禁用栈保护。
        -fno-exceptions: 禁用C++异常处理
编译目标架构选项:
        -march:指定目标架构,如-march=native。
        -m32:编译为32位目标。
        -m64:编译为64位目标。

 警告相关:

—Wall: 开启大部分警告
—Werror:将警告视为错误


gcc使用方法进阶-静态库和动态库的创建:

1、创建静态库的基本步骤:
        1、编译源文件生成目标文件(.o文件):
        gcc -c file1.c file2.c
        2、创建静态库:
        ar rcs libmylib.a file1.o file2.o
2、创建动态库的基本步骤:
        1、编译源文件生成位置无关的目标文件:
        gcc-fPIC-c file1.c file2.c
        2、创建动态库:
        gcc -shared -o libmylib.so file1.o file2.o
        注意,创建动态库时需要加上-PIC选项,以生成位置无关的代码,以便在不同的内存地址中加载。

4、make命令

make是一个自动化构建工具,用于管理源代码的编译和构建过程。它可以根据规则和依赖关系自动确定哪些文件需要重新编译,从而使整个构建过程更加高效和自动化。make使用一个名为Makefile的文本文件来描述编译和构建规则。

Makefile文件:

Makefile定义了如何编译源代码、如何生成目标文件以及如何生成最终的可执行文件或库。Makefile使用一种类似于脚本的语法,其中包含了目标、依赖关系和命令。

Makefile基础:
        目标(Target):目标是Makefile中的一个名称,表示您要构建的文件或操作。目标可以是可执行文件、库文件、伪目标(用于执行特定操作,如清理文件)等。
        依赖关系(Dependencies):  每个目标可以有零个或多个依赖关系,表示生成该目标所需的其他文件或目标。依赖关系告诉make哪些文件在构建目标之前需要被更新或重新生成。
        规则(Ruls):规则定义了如何从依赖关系生成目标文件的过程。规则包括目标、依赖关系和构建命令。
        命令(Commands):命令是在规则中定义的一系列操作步骤,用于从依赖关系生成目标。命令通常以Tab开头,并列出了实际的编译、链接等操作。
        变量(Variables):变量用于存储和传递值,使Makefile更具可维护性。您可以使用变量来存储编译器选项、源文件列表等。
        注释(Comments):注释用于向Makefile添加说明,以便其他人理解构建过程和规则。

Makefile内容例如:

CC=gcc
CFLAGS =-Wall
myprogram: main.c   utils.c$(CC)$(CFLAGS)-o myprogram main.c
utils.c
clean:rm -f myprogram 

make常用命令:

make-f: 用于指定一个不同于默认名称的Makefile文件来执行构建操作。
make-j N:使用多个并行任务进行构建,其中N是并行任务的数量。例如make-j4将使用4
个任务并行构建。
make-C  dir:在指定的目录中执行make命令。例如make-C src将在src目录中执行构建。
make -B或make --always-make:强制重新构建目标,即使目标已经是最新的。这在需要强制重新构建的情况下很有用。

cmake、gmake、qmake:

CMake(需要安装)是一个跨平台的构建工具,用于生成用于不同编译器和操作系统的构建文件(如Makefile、Visual Studio项目等)。使用一种类似脚本的语言来描述项目的构建过程,并生成相应的构建文件。CMake的一个主要优势是可以生成多种不同编译系统所需的构建文件。
gmake(GNU make)在不同的操作系统中也存在,但其Makefile文件在不同的平台上可能需要进行修改才能适应不同的编译器和操作系统。
qmake是Qt框架附带的构建工具,用于生成Qt项目的构建文件。它使用.pro文件来描述项目的配置和构建规则。qmake可以生成Makefile或Visual Studio项目文件,以便在不同平台上构建Qt项目。

5、软件编译过程中常见错误

        依赖问题:缺少所需的依赖库或工具,导致编译过程失败。解决方法包括安装缺失的依赖、更新版本,或者指定正确的依赖路径。
        编译器错误:编译器报错或警告,可能由于语法错误、类型不匹配等问题。解决方法涉及修改源代码以修复问题,确保代码符合编译器规范。
        库路径问题:编译器找不到所需的库文件,可能是因为库路径未正确配置。解决方法包括指定正确的库路径、更新库链接等。
        版本不兼容:编译代码可能与特定版本的库、编译器或操作系统不兼容。解决方法可能涉及更新或降级软件,以满足兼容性要求。
        文件缺失或损坏:源代码或依赖文件可能缺失、损坏或下载不完整,导致编译失败。解决方法包括重新下载文件、修复文件损坏等 。

……

6、conda基本概念介绍

conda是一个开源的包管理和环境管理工具,主要用于数据科学、机器学习和科学计算等领域。允许用户轻松创建、管理和分享不同的虚拟环境,以及安装和管理不同版本的软件包和库。
conda最初是Anaconda发行版中的一部分,后来作为一个独立的工具被广泛使用。


1.包版本管理:conda允许用户安装特定版本的软件包,并可以在不同版本之间切换。这对于确保项目在不同环境和平台上的一致性非常有用。
2.环境管理:conda支持创建和管理独立的虚拟环境。每个环境都可以有自己的依赖、配置和Python版本。这使得在同一台机器上同时管理多个项目变得更加容易。
3.虚拟环境集成:conda可以创建和管理虚拟环境,但也可以与其他虚拟环境工具(如virtualenv)集成,以提供更大的灵活性。

conda的基本命令:
创建虚拟环境:conda  create  --name  myenv
激活虚拟环境或进入虚拟环境:conda activate  myenv

在虚拟环境中安装软件包:conda install numpy
列出已安装的软件包:conda list
卸载软件包:conda remove numpy
退出虚拟环境:conda deactivate

删除虚拟环境:先执行退出虚拟环境的命令,再执行conda env remove --name 虚拟环境名。
创建环境配置文件:conda env export > environment.yml
从配置文件创建环境:conda env create -f environment.yml

我创建的虚拟环境的路径:/home/服务器名称/anaconda3/envs/环境名称
可以通过conda-help或conda<subcommand>-help查看更详细的帮助信息 

与此相似的,virtualenv是一个非常有用的工具,特别适用于多项目开发环境中,它通过隔离环境、管理依赖和提供独立的Python版本等功能,使得Python项目开发更加灵活、可靠和可维护。

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

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

相关文章

AI 绘画Stable Diffusion 研究(九)sd图生图功能详解-老照片高清修复放大

大家好&#xff0c;我是风雨无阻。 通过前面几篇文章的介绍&#xff0c;相信各位小伙伴&#xff0c;对 Stable Diffusion 这款强大的AI 绘图系统有了全新的认知。我们见识到了借助 Stable Diffusion的文生图功能&#xff0c;利用简单的几个单词&#xff0c;就可以生成完美的图片…

7-3 求给定精度的简单交错序列部分和

分数 15 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求编写程序&#xff0c;计算序列部分和 1 - 1/4 1/7 - 1/10 ... 直到最后一项的绝对值不大于给定精度eps。 输入格式: 输入在一行中给出一个正实数eps。 输出格式: 在一行中按照“sum S”的格式输出…

.net连接mysql,提示找不到请求的 .Net Framework Data Provider。可能没有安装

开发完成的.net程序需要连接mysql数据库&#xff0c;在个人电脑上运行没问题&#xff0c;别人运行时提示“提示找不到请求的 .Net Framework Data Provider。可能没有安装”。经过查询&#xff0c;安装Connector/NET 8.1.0&#xff0c;下载地址如下所示&#xff1a; https://d…

(分治) 剑指 Offer 16. 数值的整数次方 ——【Leetcode每日一题】

❓剑指 Offer 16. 数值的整数次方 难度&#xff1a;中等 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数&#xff08;即&#xff0c; x n x^n xn&#xff09;。不得使用库函数&#xff0c;同时不需要考虑大数问题。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n …

腾讯云轻量服务器测评:2核 2G 4M

腾讯云轻量2核2G4M服务器&#xff0c;4M带宽下载速度可达512KB/秒&#xff0c;系统盘为50GB SSD盘&#xff0c;300GB月流量&#xff0c;地域节点可选上海、广州和北京&#xff0c;腾讯云百科分享腾讯云2核2G4M轻量应用服务器配置性能表&#xff1a; 目录 腾讯云轻量2核2G4M服…

谈谈网络协议的定义、组成和重要性

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、网络协议的定义 二、网络协议的组成 1、…

Vite更新依赖缓存失败,强制更新依赖缓存

使用vitets开发一段时间了&#xff0c;感觉并不是想象中的好用&#xff0c;特别是出现些稀奇古怪的问题不好解决&#xff0c;比如下面这个问题 上午9:50:08 [vite] error while updating dependencies: Error: ENOENT: no such file or directory, open E:/workspace-dir/node…

常见期权策略类型有哪些?

这几天在做一个期权策略类型的整理分类&#xff0c;怎么解释期权策略&#xff0c;期权策略是现代金融市场中运用非常广泛、变化非常丰富、结构非常精妙的金融衍生产品&#xff1b;同时也是一种更为复杂也更为灵活的投资工具&#xff0c;下文介绍常见期权策略类型有哪些&#xf…

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRLSTM长短期记忆神经网络分位数回归时间序…

【Git】(四)子模块

1、增加子模块 进入准备添加子模块所在的目录&#xff0c;例如library。 git submodule add -b 1.0.0.0 gitgitee.com:sunriver2000/SubModule.git参数-b用于指定子模块分支。 2、更新子模块 git submodule update --progress --init --recursive --force --remote -- "…

[Go版]算法通关村第十一关白银——位运算的高频算法题

目录 专题1&#xff1a;位移的妙用题目&#xff1a;位1的个数&#xff08;也被称为汉明重量&#xff09;解法1&#xff1a;遍历所有位&#xff0c;判断每个位的数字是否是1Go代码 解法2&#xff1a;依次消除每个1的位 numnum&(num-1)Go代码 题目&#xff1a;比特位计数思路…

【数据结构】树和二叉树的概念及结构

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…

迅捷视频工具箱:多功能音视频处理软件

这是一款以视频剪辑、视频转换、屏幕录像等特色功能为主&#xff0c;同时附带有视频压缩、视频分割、视频合并等常用视频处理功能为主的视频编辑软件。该软件操作简单易用&#xff0c;即使没有视频处理经验的用户也可以轻松上手。将视频添加到工具箱对应功能后&#xff0c;简单…

腾讯云3年轻量应用服务器2核4G5M和2核2G4M详细介绍

腾讯云轻量应用服务器3年配置&#xff0c;目前可以选择三年的轻量配置为2核2G4M和2核4G5M&#xff0c;2核2G4M和2核4G5M带宽&#xff0c;当然也可以选择选一年&#xff0c;第二年xufei会比较gui&#xff0c;腾讯云百科分享腾讯云轻量应用服务器3年配置表&#xff1a; 目录 腾…

javaScript:数组检测

目录 一.前言 二.数组检测方法 1.every&#xff08;&#xff09; 2.some&#xff08;&#xff09; 3.filter&#xff08;&#xff09; 一.前言 数组检测是指在编程中对数组进行验证和检查的过程。数组检测可以涉及以下方面&#xff1a; 确定数组的存在&#xff1a;在使用数…

C++线程库

C线程库是C11新增的重要的技术之一&#xff0c;接下来来简单学习一下吧&#xff01; thread类常用接口 函数名功能thread()构造一个线程对象&#xff0c;没有关联任何线程函数&#xff0c;即没有启动任何线程。thread(fn, args1, args2, ...)构造一个线程对象&#xff0c;并…

01.在实战中提升自己----表达式解析

1.我们面临的问题与挑战 我的工作成功就是交付可用产品&#xff0c;而且是要满足超大规模企业应用的产品。在实践过程中&#xff0c;不管我们是处于哪个阶段&#xff0c;交付的内容就是会大规模应用的工具。在我们的面前&#xff0c;要不提供完善的支持配套&#xff0c;要不投…

VS2022如何显示Class View窗口

点击菜单栏的“视图”选项 > “类视图”&#xff0c;即可打开Class View。

Docker 网络

目录 1.Docker 网络实现原理 一、四种网络模式 1.3Bridge模式&#xff08;默认&#xff09; 1.4 None模式&#xff08;躺平&#xff09; 二、自定义网络 2.1 查看网络模式列表 三.资源控制 1&#xff0e;CPU 资源控制 2.设置CPU使用率上限 3.进行CPU压力测试 4.设置…

Linux 终端命令之文件浏览(1) cat

Linux 文件浏览命令 cat, more, less, head, tail&#xff0c;此五个文件浏览类的命令皆为外部命令。 hannHannYang:~$ which cat /usr/bin/cat hannHannYang:~$ which more /usr/bin/more hannHannYang:~$ which less /usr/bin/less hannHannYang:~$ which head /usr/bin/he…