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

这篇具有很好参考价值的文章主要介绍了(二)掌握最基本的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++编译过程

编译过程、各种文件、

(二)掌握最基本的Linux服务器用法——Linux下简单的C/C++ 程序、项目编译,Linux系统和环境搭建简介,linux,运维,服务器

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项目开发更加灵活、可靠和可维护。文章来源地址https://www.toymoban.com/news/detail-655566.html

到了这里,关于(二)掌握最基本的Linux服务器用法——Linux下简单的C/C++ 程序、项目编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Linux服务器上简单部署一个Python项目

    一、在对应的服务器上检查有无Python环境 二、在服务器上创建对应项目的文件 三、收集项目的依赖包 四、将项目拷贝到服务器 五、创建Python运行的虚拟环境,并启动 六、安装对应项目的依赖包 七、运行主程序文件 以上就是在Linux上简单部署一个python项目的方法。

    2024年02月12日
    浏览(35)
  • 简单的UDP网络程序·续写(后端服务器)

    该文承接文章 简单的UDP网络程序 对于客户端和服务端的基本源码参考上文,该文对服务器润色一下,并且实现几个基本的业务服务逻辑 目录 demo1 第一个功能:字典翻译 初始化字典 测试代码:打印 字符串分割 客户端修改 成品效果 字典热加载 signal demo2 远端命令行解析 p

    2024年02月09日
    浏览(29)
  • Linux下Samba服务器的安装与配置(简单实用)

    为了可以实现Linux与windows之间实现文件的共享,方便文件可以直接修改,而不是像以前需要拷贝文件再进行修改,samba的诞生是为了实现现在的这些需求。我们知道Linux之间可以使用NFS服务器来实现文件的共享,samba的诞生就是为了使windows能够访问Linux的资源。 下面是samba服务

    2024年02月12日
    浏览(39)
  • Linux下服务器基本环境搭建步骤详解(三种软件安装方式)

    小伙伴们注意看:下面使用三种方式分别安装JDK、Tomcat、Docker进行演示 操作系统基于CentOs7. Linux服务器的学习小结,希望能给到小伙伴们一点帮助。同时也方便我自己回顾。觉得可以记得好评点赞,阿里嘎多! 1、rpm下载地址 方式一 :rpm 下载地址 方式二 :https://www.aliyundr

    2024年02月11日
    浏览(31)
  • 简单的TCP网络程序·单进程(后端服务器)

    目录 文件1:tcpServer.cc 文件2:tcpServer.hpp 1.提出日志概念 -- 在后续完善 日志格式 -- 暂定简单的打印功能 2.创建套接字 SOCK_STREAM -- socket参数 3.bind自己的套接字 4.设置socket 为监听状态 * 新接口1:listen 函数1:initServer() 新接口2:accept * 接口1:read 接口2:write 文件描述符本质是

    2024年02月11日
    浏览(36)
  • 简单的TCP网络程序·线程池(后端服务器)

    目录 版本四:线程池 注意事项 文件:Task.hpp -- 任务单独为一个文件 组件:日志修改 新函数:vprintf() 可变参数的提取逻辑 vfprintf()的工作原理 初始化一个va_list 日志准备 获取时间小知识 日志初版 日志启动测试 TCP通用服务器(守护进程) * 新指令1:jobs -- 查看进程作业 新指令

    2024年02月09日
    浏览(33)
  • Linux 基于 TCP 协议的简单服务器-客户端应用

    目录 一、相关函数  1、listen() 2、accept() 3、connect()  4、两种IP地址转换方式  5、TCP和UDP数据发送和接收函数对比 5、log.hpp自定义记录日志 二、udp_server.hpp单进程版本 三、tcp_server.cc 四、Telnet客户端(代替tcp_client.cc) 五、多进程实现udp_server.hpp 1、多进程版本一 2、tcp_client.

    2024年04月27日
    浏览(37)
  • Linux上搭建Socks5服务器最简单的方法

    说起socks5,这种服务是有点年头了。 以前最知名的socks5服务端就属ss5,但这老掉牙的玩意着实不太行。看这个文档: linux搭建socks5代理_linux ss5_Venele的博客-CSDN博客 又要装一大堆工具,还很难配置。 以前我装过这个玩意,想成功访问还要配置半天。结果为了方便配的空密码,

    2024年02月06日
    浏览(27)
  • MobaXterm的下载及简单使用(建立 SSH 连接到 Linux 服务器)

    目录 一、MobaXterm 的下载 二、MobaXterm 的简单使用(建立 SSH 连接到 Linux 服务器) 三、会遇到的问题 问题1 问题2 官方下载地址:MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download 1.进入首页后,有家庭版(Home Edition)和专用版(Professional Edition)两个版本,我们选择为免费的家

    2024年02月09日
    浏览(47)
  • 本地搭建微信小程序或者公众号开发服务器的简单方法

    现在小程序开发需要购买服务器,价格还是有点贵的,这里好代码网分享一个可以花费小代价就可以搭建一个本地服务器,可以用来开发小程序和微信公众号等。 1.域名(备案过的) 2.阿里云注册免费的https证书 3.配置本地的nginx 4.内网映射(本地安装wampserver 服务器) 一、域

    2024年02月02日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包