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

liunx的编译与链接(7)

1.条件编译的现实用途1.软件根据收费情况进行条件编译来对代码进行动态裁剪2.不同硬件所需的内核代码不同可以采用条件编译来进行代码裁剪3.开发工具应用软件的代码采用条件编译来适配不同的操作系统2.要转换为汇编语言的原因是历史导致代码的本质是操作计算机。历史发展的操作为开关打孔编程0与1汇编语言同期生成编译器c语言c...因此c语言出现时汇编语言已经出现了很久了让c语言自己去生成二进制文件效率不高但先转换为汇编语言就快很多。同时汇编代码的编译器的底层是二进制经过包装后才用汇编语言实现的c语言的编译器的底层也是汇编经过包装才用c语言实现的总之转换为汇编的原因就是站在巨人的肩膀上了。因此编译器的语言自举就是一门新的语言的编译器的出现要用旧语言的编译器来封装加工来实现更新迭代的过程。3.链接头文件展开的是函数的声明源代码怎么可能随便让被别人看到因此链接的一部分也是用于连接外部库。库一套数据集给我们开发时所需的最基础的功能加速我们二次开发usr/lib64就有系统中存在的默认库。[rootVM-0-2-centos ~]# ls /usr/lib64 audit libEGL.so.1 libkdb5.so libpcre32.so.0.0.0 libulockmgr.so.1.0.1 bind9-export libEGL.so.1.1.0 libkdb5.so.8 libpcrecpp.so libunibilium.so.4 cifs-utils //很少的一部分一个库的真实名字是去掉lib前缀核去掉.so后缀时的剩下部分。libc.so //就是c语言的库4.链接再理解1.动态库有各种函数的源代码2.我们写的代码中有需要调用外部库中的函数的地方链接就是实现上面两步的从而形成可执行程序。链接分两种动态链接核静态链接动态链接给我们本地的程序知道了外部库中源代码函数的地址从而实现调用。调用动态库叫动态库调用从动态库回来叫动态库返回。动态库也叫共享库一旦缺失整个程序都无法运行。静态链接直接将外部库中对应函数的源代码块直接拷贝一份到本地代码处后续调用本地的函数。比较二者静态链接动态链接优点静态库缺失程序也依旧可以运行动态库形成的程序体积小动态库更省内存和磁盘缺点静态库形成的程序体积大动态库缺失程序无法运行程序在内存中运行时静态链接会出现大量重复代码gcc编译时可执行文件时默认动态链接[fengyouyinliVM-0-2-centos leeson]$ gcc test.c -o code [fengyouyinliVM-0-2-centos leeson]$ ls code test.c [fengyouyinliVM-0-2-centos leeson]$ file code code: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), //核心在这里 dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]a91b78a2aaa776590ede6b7c259cb2d72fcb2060, not stripped //此处说明了使用了动态库里面还有c语言库 [fengyouyinliVM-0-2-centos leeson]$ ldd code linux-vdso.so.1 (0x00007ffedffdb000) libc.so.6 /lib64/libc.so.6 (0x00007f50e4814000) /lib64/ld-linux-x86-64.so.2 (0x00007f50e4be2000)静态库没什么用就不讲了。只需知道静态文件会比动态文件大很多即可从内存角度看静态链接和动态链接在调用静态文件时静态库是不用加到内存中的因为静态文件所需的代码已经加载到文件中了在调用动态文件时动态库是要加到内存中的因为这样就可以同时给多个动态链接文件同时使用同一份代码实现内存的节约因此动态库确实应该叫共享库。5.多文件编译的方式将所有.c文件打包在一起同路径保留这些文件的头文件即可也就是头文件也要在一个目录中。将自己的代码给别人用时可以传.o的源文件和.h的头文件因为.c和.o都可以直接链接。别人跟据.h中的函数声明调用然后和他自己的.o(.c)文件一起链接即可。此时既可以实现共享代码的同时保密自己的代码因此链接的本质就是将所有要用到的.0文件进行链接。

相关文章:

liunx的编译与链接(7)

1.条件编译的现实用途1.软件根据收费情况进行条件编译来对代码进行动态裁剪2.不同硬件所需的内核代码不同,可以采用条件编译来进行代码裁剪3.开发工具,应用软件的代码采用条件编译来适配不同的操作系统2.要转换为汇编语言的原因是历史导致代码的本质是操…...

基于hadoop+spark+hive的高校科研项目管理系统的设计与实现

前言在高校科研项目管理领域,传统管理方式逐渐显露出诸多问题,亟待更为有效的解决方案。本研究聚焦于此,尝试借助 Python、Django、Vue 以及 MySQL 等技术,探索设计并实现一款高校科研项目管理系统。 研究过程中,运用文…...

XZ1820A输入电压6-90V 输出电压ADJ(0.8V-50V) 输出电流2A

这是一款单片集成可设定输出电流的开关型降压恒压驱动器,可工作在宽输入电压范围具有优良的负载和线性调整度。安全保护机制包括每周期的峰值限流、软启动、过压保护和温度保护,带短路保护。保护点150度的温度过热保护,较高占空比大于92%。压差最小2V左右…...

效率提升:基于快马生成自动化脚本,一键高效切换win11右键菜单至win10模式

最近在升级到Windows 11后,发现右键菜单的改动让工作效率大打折扣。作为一个长期使用Windows 10的用户,新系统的右键菜单需要多点击一次"显示更多选项"才能看到完整功能,这在日常文件操作中增加了不少额外步骤。于是我开始寻找解决…...

猫抓浏览器扩展:新手也能掌握的网页资源嗅探终极指南

猫抓浏览器扩展:新手也能掌握的网页资源嗅探终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在浏览网页时&#xff…...

实战指南:利用快马平台,无需下载qoderwork即可构建Vue3库存管理系统

最近在做一个库存管理系统的需求,发现很多开发者都在找qoderwork这类代码生成工具。但实际用下来发现,这类工具生成的代码往往需要二次修改,而且下载安装过程也挺麻烦的。后来尝试了InsCode(快马)平台,发现它不仅能直接生成可运行…...

Simulink 中2-D Assignment 模块的进阶应用与批量赋值技巧

1. 从零认识2-D Assignment模块 第一次在Simulink里看到Assignment模块时,我完全没意识到这个小方块能玩出这么多花样。简单来说,它就是个专门给数组"改作业"的工具——你可以精确指定要修改数组中的哪些元素,就像老师用红笔批改试…...

告别Pyscenedetect误判!用TransNet V2精准切割视频转场(附Python实战代码)

告别Pyscenedetect误判!用TransNet V2精准切割视频转场(附Python实战代码) 视频内容创作者和开发者们,是否曾为传统视频切割工具的误判而头疼?高速运动的赛车镜头被误认为转场,长达数秒的渐变过渡被完全忽…...

从单机到集群:手把手教你用ES 7.10.0自带JDK搭建多节点测试环境

从单机到集群:手把手教你用ES 7.10.0自带JDK搭建多节点测试环境 在当今数据驱动的时代,Elasticsearch(ES)作为一款开源的分布式搜索和分析引擎,已经成为许多企业和开发者处理海量数据的首选工具。对于开发者和测试人员…...

从模型到落地:音频降噪技术选型与工程化实战指南

1. 音频降噪技术选型的核心挑战 当你第一次把降噪模型部署到手机端时,大概率会遇到这样的场景:实验室里效果惊艳的模型,在实际设备上要么卡成幻灯片,要么耗电像开了暖手宝。这就是端侧音频降噪最现实的困境——我们必须在效果、算…...

Python自动化:调用企业微信API高效推送邮件通知

1. 为什么需要企业微信邮件自动化 每天手动发送运营报告的日子我受够了。作为团队的技术负责人,曾经每周都要花2小时整理数据、写邮件、检查收件人列表。直到发现企业微信API能实现全自动化,现在整个过程只需30秒,准确率还更高。 企业微信的邮…...

G-Helper华硕笔记本优化指南:三步告别臃肿控制中心,性能提升30%

G-Helper华硕笔记本优化指南:三步告别臃肿控制中心,性能提升30% 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, …...

【C++笔记】STL详解: stack 和 queue 的使用

前言:在 C 的标准模板库 (STL) 中,stack(栈)和 queue(队列)是非常重要且常用的数据结构。它们都属于“容器适配器”,这意味着它们不是从零开始构建的,而是封装了其他底层容器&#x…...

别再乱改组策略了!深入理解CredSSP更新与远程桌面安全的正确配置姿势

深入解析CredSSP安全机制与远程桌面连接的最佳实践 1. CredSSP协议与加密Oracle漏洞的本质 CredSSP(Credential Security Support Provider)协议是微软开发的一种身份验证协议,主要用于远程桌面连接等场景下的凭据安全传输。2018年曝光的CVE-…...

如何快速下载网页视频:猫抓(cat-catch)浏览器扩展完全指南

如何快速下载网页视频:猫抓(cat-catch)浏览器扩展完全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)是一款功能强…...

[嵌入式系统]的[WiFi网络配置]:从[连接不稳定]到[可靠通信]的实践指南

[嵌入式系统]的[WiFi网络配置]:从[连接不稳定]到[可靠通信]的实践指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 1. 问题发现:WiFi连接的隐形障碍 当我们在开…...

C#开发者必看:INIFileParser库解决INI配置文件乱码问题的实战指南

C#开发者必看:INIFileParser库解决INI配置文件乱码问题的实战指南 在Windows应用开发中,INI文件作为一种轻量级配置存储格式,至今仍被广泛使用。但许多C#开发者发现,当配置文件路径包含中文、空格或特殊字符时,传统的W…...

计算机毕设源码到底包含什么?一文搞懂标准交付物结构

一、为什么你的毕设源码总被导师打回? 每年毕业季,无数计算机专业学生都会遇到这样的场景:“导师看了一眼你的毕设源码,眉头一皱:‘这交付的什么?数据库脚本呢?接口文档呢?怎么连部署…...

Qwen3.5-9B Visio图表智能生成:根据文本描述自动创建流程图与架构图

Qwen3.5-9B Visio图表智能生成:根据文本描述自动创建流程图与架构图 1. 引言:告别手动绘图的烦恼 你有没有遇到过这样的情况?开会讨论完一个业务流程,需要把它画成流程图;或者设计了一个系统架构,得在Vis…...

避坑指南:RAG Pipeline中多阶段处理的5个性能陷阱与优化方案(附Qwen-Turbo限流配置)

RAG Pipeline性能优化实战:五大关键陷阱与云服务适配方案 当你的RAG系统从Demo走向生产环境时,PDF解析突然内存溢出,向量数据库写入耗时呈指数增长,API调用频繁触发限流——这些性能陷阱往往在真实业务压力下才会暴露。本文将解剖…...

【Python并发成本控制终极指南】:GIL移除后3大无锁模型选型公式与ROI量化对比表

第一章:Python无锁GIL环境下的并发成本控制全景图Python 的全局解释器锁(GIL)长期被视为多线程 CPU 密集型任务的性能瓶颈。然而,随着 CPython 3.13 引入实验性无锁 GIL(--without-pymalloc 配合 --with-experimental-…...

单片机自动脱模剂喷雾控制系统

/***实现功能:检测报警信号,脱模剂开模数计数信号***/ /***参数:1:脱模剂开模数 2:喷雾时间 3:延时时间 ***/ /***串口接收触摸屏参数设置字符串,接收并保存******/ /***端子输入口读开模数,比较设定值后输出到电磁阀**/ /***端子输入口读报警信号,到设定值关闭电机及加热**/#i…...

避坑指南:用Docker部署Oracle 11g时你一定会遇到的5个权限问题(附终极解决方案)

避坑指南:用Docker部署Oracle 11g时你一定会遇到的5个权限问题(附终极解决方案) 在容器化技术席卷全球的今天,Docker已成为部署数据库的首选工具之一。然而,当我们将Oracle 11g这样的传统数据库巨人塞进轻量级容器时&a…...

Java SpringBoot+Vue3+MyBatis 信息化在线教学平台系统源码|前后端分离+MySQL数据库

摘要 随着信息技术的快速发展,教育行业正逐步向数字化、智能化转型。传统的线下教学模式受限于时间和空间,难以满足现代教育的高效性和灵活性需求。在线教学平台通过整合互联网技术与教育资源,为师生提供了便捷的交互渠道,有效提升…...

信号处理避坑指南:一维小波去噪中那些容易忽略的细节

信号处理避坑指南:一维小波去噪中那些容易忽略的细节 在信号处理领域,小波去噪因其优异的时频局部化特性,成为处理非平稳信号的首选方法。然而,许多工程师在应用PyWavelets等工具库时,往往陷入"调参陷阱"——…...

AI的恶意使用

AI 生成的内容与犯罪活动:人工智能系统正被滥用于生成诈骗、欺诈、敲诈勒索及未经同意的私密影像。尽管此类伤害的发生已有充分记录,但关于其发生率和严重程度的系统性数据仍然有限。 影响和操纵:在实验环境中,AI 生成的内容在改变…...

解锁3DS个性化定制:Anemone3DS主题管理器完全指南

解锁3DS个性化定制:Anemone3DS主题管理器完全指南 【免费下载链接】Anemone3DS A theme and boot splash manager for the Nintendo 3DS console 项目地址: https://gitcode.com/gh_mirrors/an/Anemone3DS 3DS主题定制是提升掌机使用体验的关键方式&#xff…...

Nanbeige 4.1-3B Streamlit WebUI效果展示:气泡时间戳与消息状态可视化

Nanbeige 4.1-3B Streamlit WebUI效果展示:气泡时间戳与消息状态可视化 1. 引言:当大模型遇见沉浸式聊天界面 想象一下,你正在本地部署一个强大的开源大语言模型,比如南北阁的4.1-3B版本。你通过命令行与它对话,看着…...

从相位差到厘米级精度:深入解析蓝牙6.0 CS中PBR公式的推导与验证

1. 蓝牙6.0 CS技术中的相位测距原理 蓝牙6.0引入的信道探测(CS)功能将定位精度提升到了厘米级,这主要得益于其采用的相位测距法(PBR)。想象一下,这就像用无线电波玩"激光测距",只不过我们用的是相位差而不是光脉冲。在实际操作中&a…...

5步打造Xbox 360游戏PC运行环境:Xenia Canary模拟器全攻略

5步打造Xbox 360游戏PC运行环境:Xenia Canary模拟器全攻略 【免费下载链接】xenia-canary Xbox 360 Emulator Research Project 项目地址: https://gitcode.com/gh_mirrors/xe/xenia-canary Xenia Canary作为领先的Xbox 360开源模拟器,通过精准的…...